6 #include "protos_kpp.h"
14 knode_t
* p1
, * p2
, * pm1
;
15 char kpp_interf_fname
[NAMELEN
];
22 for ( p1
= KPP_packs
; p1
!= NULL
; p1
= p1
->next
) {
25 p2
= p1
->assoc_wrf_pack
;
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") )
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 */
88 /* declare misc variables (esp. for kpp) */
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
);
177 /*---------------------------------------------------------------------*/