Update version info for release v4.6.1 (#2122)
[WRF.git] / chem / KPP / util / wkc / gen_kpp_interface.c
blob46ac0a978dfea5b046c5c182e869793fde1c2c4c
1 #include <stdio.h>
2 #include <string.h>
5 #include "protos.h"
6 #include "protos_kpp.h"
7 #include "kpp_data.h"
11 void
12 gen_kpp_interface ( )
14 knode_t * p1, * p2, * pm1;
15 char kpp_interf_fname[NAMELEN];
16 FILE * kpp_if;
17 int is_driver;
22 for ( p1 = KPP_packs ; p1 != NULL ; p1 = p1->next ) {
25 p2 = p1->assoc_wrf_pack;
26 if ( p2 ) {
28 sprintf( kpp_interf_fname, "chem/module_kpp_%s_interface.F",p2->name);
32 kpp_if = fopen(kpp_interf_fname, "w" );
34 gen_kpp_warning(kpp_if, " tools/gen_kpp_interface.c","!");
38 fprintf(kpp_if,"MODULE module_kpp_%s_interf \n\n\n",p2->name );
40 fprintf(kpp_if," USE module_state_description\n");
41 fprintf(kpp_if," USE module_configure\n\n");
44 fprintf(kpp_if," USE %s_Parameters\n",p2->name );
45 fprintf(kpp_if," USE %s_Precision\n",p2->name );
46 fprintf(kpp_if," USE %s_UpdateRconstWRF\n",p2->name );
47 fprintf(kpp_if," USE %s_Integrator\n\n",p2->name );
49 fprintf(kpp_if," USE module_wkppc_constants\n\n" );
50 if( !strcmp( p2->name,"mozcart" ) || !strcmp( p2->name,"t1_mozcart" )
51 || !strcmp( p2->name,"mozart_mosaic_4bin" ) || !strcmp( p2->name,"mozart_mosaic_4bin_aq" ) )
52 fprintf(kpp_if," USE module_irr_diag\n" );
55 fprintf(kpp_if,"\n#include <kpp_mechd_u_%s.inc> \n\n\n",p2->name );
58 /* define pointers to jvals */
59 decl_jv_pointers ( kpp_if );
62 fprintf(kpp_if,"CONTAINS \n\n");
65 fprintf(kpp_if,"SUBROUTINE %s_interface( &\n",p2->name );
66 /* pass down variables (see gen_kpp_utils) */
68 if( !strcmp( p2->name,"mozcart" ) || !strcmp( p2->name,"t1_mozcart")
69 || !strcmp( p2->name,"mozart_mosaic_4bin" ) || !strcmp( p2->name,"mozart_mosaic_4bin_aq") )
70 is_driver = 0;
71 else
72 is_driver = 1;
74 gen_kpp_pass_down( kpp_if, is_driver );
76 fprintf(kpp_if," IMPLICIT NONE");
78 /* declare variables */
79 gen_kpp_decl ( kpp_if, is_driver );
82 fprintf(kpp_if,"!local variables \n\n");
85 /* declare local array for photolysis rates */
86 decl_jv ( kpp_if );
88 /* declare misc variables (esp. for kpp) */
89 decl_misc ( kpp_if );
92 fprintf(kpp_if,"\n#include <kpp_mechd_l_%s.inc> \n\n\n",p2->name );
95 fprintf(kpp_if," \n\n");
99 /* preliminaries (setting atol, rtol from atols, rtols) */
100 wki_prelim ( kpp_if );
104 fprintf(kpp_if,"\n\n");
105 fprintf(kpp_if,"\n#include <kpp_mechd_b_%s.inc> \n\n\n",p2->name );
107 /* start loop over 3-D fields */
108 wki_start_loop ( kpp_if );
111 /* 1-D water and 3rd body concentrations, temperature */
112 wki_one_d_vars ( kpp_if, p1 );
115 /* fprintf(stderr, "1 MATCHING PACKS: %s \n", p2->name); */
117 /* map jvals for KPP (currently all jvals are mapped) */
118 gen_map_jval ( kpp_if );
122 /* map wrf to kpp species */
124 gen_map_wrf_to_kpp ( kpp_if, p1 );
126 fprintf(kpp_if,"\n#include <kpp_mechd_ibu_%s.inc> \n\n",p2->name );
129 fprintf(kpp_if, "\n\n\n\n CALL %s_Update_Rconst( &\n", p2->name ); fprintf(kpp_if, "!\n");
130 fprintf(kpp_if, "#include <extra_args_to_update_rconst_%s.inc>\n", p2->name);
131 fprintf(kpp_if, "!\n");
132 fprintf(kpp_if, "#include <args_to_update_rconst.inc>\n");
133 fprintf(kpp_if, "!\n)\n\n");
136 fprintf(kpp_if,"\n#include <kpp_mechd_ib_%s.inc> \n\n",p2->name );
138 fprintf(kpp_if, "\n\n\n\n CALL %s_INTEGRATE(TIME_START, TIME_END, & \n", p2->name );
139 fprintf(kpp_if, " FIX, VAR, RCONST, ATOL, RTOL, IRR_WRK, & \n");
140 fprintf(kpp_if, " ICNTRL_U=icntrl, RCNTRL_U=rcntrl )\n\n\n\n\n");
143 /* fprintf(kpp_if, " ICNTRL_U, RCNTRL_U, ISTATUS_U, RSTATUS_U, IERR_U )\n\n\n\n\n"); */
146 fprintf(kpp_if,"\n#include <kpp_mechd_ia_%s.inc> \n\n",p2->name );
150 /* return values from kpp to wrf */
151 gen_map_kpp_to_wrf ( kpp_if, p1 );
155 /* end loop over 3-D fields */
156 wki_end_loop( kpp_if );
159 fprintf(kpp_if,"\n\n");
160 fprintf(kpp_if,"\n#include <kpp_mechd_a_%s.inc> \n\n\n",p2->name );
162 fprintf(kpp_if,"\n\nEND SUBROUTINE %s_interface\n",p2->name );
163 fprintf(kpp_if,"\n\nEND MODULE module_kpp_%s_interf \n",p2->name );
165 fprintf(kpp_if,"\n#include <kpp_mechd_e_%s.inc> \n\n\n",p2->name );
167 fclose( kpp_if );
177 /*---------------------------------------------------------------------*/