MoDeNa  1.0
Software framework facilitating sequential multi-scale modelling
eos_numerical.f90
1 MODULE eos_numerical
2 
3  IMPLICIT NONE
4 
5  PRIVATE
6  PUBLIC :: f_numerical, phi_numerical, p_numerical, h_numerical
7 
8 CONTAINS
9 
10 
11 !WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
12 !
13 !WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
14 
15 SUBROUTINE f_numerical
16 
17  USE eos_variables
18  USE eos_constants
19  use eos_polar, only: f_polar
20  USE eos_numerical_derivatives, ONLY: ideal_gas, hard_sphere, chain_term, &
21  disp_term, hb_term, lc_term, ii_term, id_term
22  USE eos_f_contributions, ONLY:f_ideal_gas, f_hard_sphere, f_chain_tpt1, &
23  f_chain_tpt_d, f_chain_hu_liu, f_chain_hu_liu_rc, f_spt, &
24  f_disp_pcsaft, f_association, f_ion_dipole_tbh, f_ion_ion_primmsa, &
25  f_ion_ion_nonprimmsa, f_lc_mayersaupe, f_pert_theory
26 
27 
28  !-----------------------------------------------------------------------------
29  INTEGER :: i, j
30  REAL :: m_mean2
31  REAL :: fid, fhs, fdsp, fhc
32  REAL :: fhb, fdd, fqq, fdq
33  REAL :: fhend, fcc
34  REAL :: fbr, flc
35 
36  REAL :: eps_kij, k_kij
37  !-----------------------------------------------------------------------------
38 
39  eps_kij = 0.0
40  k_kij = 0.0
41 
42  fid = 0.0
43  fhs = 0.0
44  fhc = 0.0
45  fdsp= 0.0
46  fhb = 0.0
47  fdd = 0.0
48  fqq = 0.0
49  fdq = 0.0
50  fcc = 0.0
51  fbr = 0.0
52  flc = 0.0
53 
54  if ( eta < 1.e-100 ) return
55 
56 
57  CALL perturbation_parameter
58 
59  !-----------------------------------------------------------------------------
60  ! overwrite the standard mixing rules by those published by Tang & Gross
61  ! using an additional lij parameter
62  ! WARNING : the lij parameter is set to lij = - lji in 'para_input'
63  !-----------------------------------------------------------------------------
64  order1 = 0.0
65  order2 = 0.0
66  DO i = 1, ncomp
67  DO j = 1, ncomp
68  order1 = order1 + x(i)*x(j)* mseg(i)*mseg(j) * sig_ij(i,j)**3 * uij(i,j)/t
69  order2 = order2 + x(i)*x(j)* mseg(i)*mseg(j) * sig_ij(i,j)**3 * (uij(i,j)/t)**2
70  END DO
71  END DO
72  DO i = 1, ncomp
73  DO j = 1, ncomp
74  order1 = order1 + x(i)*mseg(i)/t*( x(j)*mseg(j) &
75  ! * sig_ij(i,j)*uij(i,j)**(1.0/3.0) )**3 * lij(i,j)
76  * sig_ij(i,j)*(uij(i,i)*uij(j,j))**(1.0/6.0) )**3 *lij(i,j)
77  END DO
78  END DO
79 
80 
81  !-----------------------------------------------------------------------------
82  ! a non-standard mixing rule scaling the hard-sphere term
83  ! WARNING : the lij parameter is set to lij = - lji in 'para_input'
84  ! (uses an additional lij parameter)
85  !-----------------------------------------------------------------------------
86  m_mean2 = 0.0
87  DO i = 1, ncomp
88  DO j = 1, ncomp
89  m_mean2 = m_mean2 + x(i)*x(j)*(mseg(i)+mseg(j))/2.0
90  END DO
91  END DO
92  DO i = 1, ncomp
93  DO j = 1, ncomp
94  ! m_mean2=m_mean2+x(i)*(x(j)*((mseg(i)+mseg(j))*0.5)**(1.0/3.0) *lij(i,j) )**3
95  END DO
96  END DO
97 
98  !---- ideal gas contribution -------------------------------------------------
99  IF ( ideal_gas == 'yes' ) CALL f_ideal_gas ( fid )
100  !-----------------------------------------------------------------------------
101 
102  !---- hard-sphere contribution -----------------------------------------------
103  IF ( hard_sphere == 'CSBM' ) CALL f_hard_sphere ( m_mean2, fhs )
104  !-----------------------------------------------------------------------------
105 
106  !--- chain term --------------------------------------------------------------
107  IF ( chain_term == 'TPT1' ) CALL f_chain_tpt1 ( fhc )
108  IF ( chain_term == 'TPT2' ) CALL f_chain_tpt_d ( fhc )
109  IF ( chain_term == 'HuLiu' ) CALL f_chain_hu_liu ( fhc )
110  IF ( chain_term == 'HuLiu_rc' ) CALL f_chain_hu_liu_rc ( fhs, fhc )
111  IF ( chain_term == 'SPT' ) CALL f_spt ( fhs, fhc )
112  !-----------------------------------------------------------------------------
113 
114  !---- dispersive attraction --------------------------------------------------
115  IF ( disp_term == 'PC-SAFT') CALL f_disp_pcsaft ( fdsp )
116  ! IF ( disp_term == 'CK') CALL F_DISP_CKSAFT ( fdsp )
117  IF ( disp_term(1:2) == 'PT') CALL f_pert_theory ( fdsp )
118  !-----------------------------------------------------------------------------
119 
120  !---- H-bonding contribution / Association -----------------------------------
121  IF ( hb_term == 'TPT1_Chap') CALL f_association( eps_kij, k_kij, fhb )
122  !-----------------------------------------------------------------------------
123 
124  !---- polar terms ------------------------------------------------------------
125  CALL f_polar ( fdd, fqq, fdq )
126  !-----------------------------------------------------------------------------
127 
128  !---- ion-dipole term --------------------------------------------------------
129  IF ( id_term == 'TBH') CALL f_ion_dipole_tbh ( fhend )
130  !-----------------------------------------------------------------------------
131 
132  !---- ion-ion term -----------------------------------------------------------
133  IF ( ii_term == 'primMSA') CALL f_ion_ion_primmsa ( fcc )
134  IF ( ii_term == 'nprMSA') CALL f_ion_ion_nonprimmsa ( fdd, fqq, fdq, fcc )
135  !-----------------------------------------------------------------------------
136 
137  !---- liquid-crystal term ----------------------------------------------------
138  IF ( lc_term == 'MSaupe') CALL f_lc_mayersaupe ( flc )
139  !-----------------------------------------------------------------------------
140 
141  !=============================================================================
142  ! SUBTRACT TERMS (local density approximation) FOR DFT
143  !=============================================================================
144 
145  !IF ( subtract1 == '1PT') CALL F_subtract_local_pert_theory ( subtract1, fdsp )
146  !IF ( subtract1 == '2PT') CALL F_subtract_local_pert_theory ( subtract1, fdsp )
147  !IF ( subtract2 =='ITTpolar') CALL F_local_ITT_polar ( fdd )
148  !-----------------------------------------------------------------------------
149 
150  !-----------------------------------------------------------------------------
151  ! residual Helmholtz energy F/(NkT)
152  !-----------------------------------------------------------------------------
153  fres = fid + fhs + fhc + fdsp + fhb + fdd + fqq + fdq + fcc + flc
154 
155  tfr = 0.0
156 
157 END SUBROUTINE f_numerical
158 
159 
160 
161 !WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
162 !
163 !WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
164 
165 SUBROUTINE phi_numerical
166 
167  USE eos_variables
168  USE eos_constants
169  USE dft_module, ONLY: z_ges, fres_temp
170 
171  !-----------------------------------------------------------------------------
172  INTEGER :: k
173  REAL :: zres, zges
174  REAL :: fres1, fres2, fres3, fres4, fres5
175  REAL :: delta_rho
176  REAL :: delta_factor, delta_rho_thrash
177  REAL, DIMENSION(nc) :: myres
178  REAL, DIMENSION(nc) :: rhoi, rhoi_0
179  REAL :: tfr_1, tfr_2, tfr_3, tfr_4, tfr_5
180  !-----------------------------------------------------------------------------
181 
182 
183  !-----------------------------------------------------------------------------
184  ! density iteration or pressure calculation
185  !-----------------------------------------------------------------------------
186 
187  IF (ensemble_flag == 'tp') THEN
188  CALL density_iteration
189  ELSEIF (ensemble_flag == 'tv') THEN
190  eta = eta_start
191  CALL p_numerical
192  ELSE
193  write (*,*) 'PHI_EOS: define ensemble, ensemble_flag == (tv) or (tp)'
194  stop
195  END IF
196 
197  !-----------------------------------------------------------------------------
198  ! compressibility factor z = p/(kT*rho)
199  !-----------------------------------------------------------------------------
200 
201  zges = (p * 1.e-30) / (kbol*t*eta/z3t)
202  IF ( ensemble_flag == 'tv' ) zges = (pges * 1.e-30) / (kbol*t*eta/z3t)
203  zres = zges - 1.0
204  z_ges = zges
205 
206  rhoi_0(1:ncomp) = x(1:ncomp) * eta/z3t
207  rhoi(1:ncomp) = rhoi_0(1:ncomp)
208 
209 
210  !-----------------------------------------------------------------------------
211  ! derivative to rho_k (keeping other rho_i's constant
212  !-----------------------------------------------------------------------------
213 
214  delta_factor = 1.e-2
215  IF (sum(nhb_typ(1:ncomp)) /= 0) delta_rho = 1.e-3
216  delta_rho_thrash = 1.e-6
217 
218  DO k = 1, ncomp
219 
220  IF ( rhoi_0(k) > delta_rho_thrash ) THEN
221  delta_rho = delta_factor * rhoi_0(k)
222  ELSE
223  delta_rho = delta_rho_thrash * delta_factor
224  END IF
225 
226  rhoi(k) = rhoi_0(k) + delta_rho
227  eta = pi/6.0 * sum( rhoi(1:ncomp)*mseg(1:ncomp)*dhs(1:ncomp)**3 )
228  x(1:ncomp) = rhoi(1:ncomp) / sum( rhoi(1:ncomp) )
229  rho = sum( rhoi(1:ncomp) )
230  CALL f_numerical
231  fres1 = fres*rho
232  tfr_1 = tfr*rho
233 
234  rhoi(k) = rhoi_0(k) + 0.5 * delta_rho
235  eta = pi/6.0 * sum( rhoi(1:ncomp)*mseg(1:ncomp)*dhs(1:ncomp)**3 )
236  x(1:ncomp) = rhoi(1:ncomp) / sum( rhoi(1:ncomp) )
237  rho = sum( rhoi(1:ncomp) )
238  CALL f_numerical
239  fres2 = fres*rho
240  tfr_2 = tfr*rho
241 
242  fres4 = 0.0
243  fres5 = 0.0
244  IF ( rhoi_0(k) > delta_rho ) THEN
245 
246  rhoi(k) = rhoi_0(k) - 0.5 * delta_rho
247  eta = pi/6.0 * sum( rhoi(1:ncomp)*mseg(1:ncomp)*dhs(1:ncomp)**3 )
248  x(1:ncomp) = rhoi(1:ncomp) / sum( rhoi(1:ncomp) )
249  rho = sum( rhoi(1:ncomp) )
250  CALL f_numerical
251  fres4 = fres*rho
252  tfr_4 = tfr*rho
253 
254  rhoi(k) = rhoi_0(k) - delta_rho
255  eta = pi/6.0 * sum( rhoi(1:ncomp)*mseg(1:ncomp)*dhs(1:ncomp)**3 )
256  x(1:ncomp) = rhoi(1:ncomp) / sum( rhoi(1:ncomp) )
257  rho = sum( rhoi(1:ncomp) )
258  CALL f_numerical
259  fres5 = fres*rho
260  tfr_5 = tfr*rho
261 
262  END IF
263 
264  rhoi(k) = rhoi_0(k)
265  eta = pi/6.0 * sum( rhoi(1:ncomp)*mseg(1:ncomp)*dhs(1:ncomp)**3 )
266  x(1:ncomp) = rhoi(1:ncomp) / sum( rhoi(1:ncomp) )
267  rho = sum( rhoi(1:ncomp) )
268  CALL f_numerical
269  fres3 = fres*rho
270  tfr_3 = tfr*rho
271 
272  IF ( rhoi_0(k) > delta_rho ) THEN
273  myres(k) = ( fres5 - 8.0*fres4 + 8.0*fres2 - fres1 ) / ( 6.0*delta_rho )
274  ELSE
275  myres(k) = ( -3.0*fres3 + 4.0*fres2 - fres1 ) / delta_rho
276  END IF
277 
278  END DO
279 
280 
281  !-----------------------------------------------------------------------------
282  ! residual Helmholtz energy
283  !-----------------------------------------------------------------------------
284 
285  fres_temp = fres
286 
287  !-----------------------------------------------------------------------------
288  ! residual chemical potential
289  !-----------------------------------------------------------------------------
290 
291  DO k = 1, ncomp
292  IF (ensemble_flag == 'tp') lnphi(k) = myres(k) - log(zges)
293  IF (ensemble_flag == 'tv' .AND. eta >= 0.0) lnphi(k) = myres(k) !+LOG(rho)
294  ! write (*,*) 'in',k,EXP(lnphi(k)),LOG(zges),eta
295  ! IF (DFT.GE.98) write (*,*) dft
296  ! write (*,*) 'lnphi',k,LNPHI(k),x(k),MYRES(k), -LOG(ZGES)
297  ! pause
298  END DO
299 
300 END SUBROUTINE phi_numerical
301 
302 
303 !WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
304 !
305 !WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
306 
307 SUBROUTINE p_numerical
308 
309  USE eos_variables
310  USE utilities
311 
312  !-----------------------------------------------------------------------------
313  REAL :: dzetdv, eta_0, dist, fact
314  REAL :: fres1, fres2, fres3, fres4, fres5
315  REAL :: df_dr, df_drdr, pideal, dpiddz
316  REAL :: tfr_1, tfr_2, tfr_3, tfr_4, tfr_5
317  !-----------------------------------------------------------------------------
318 
319 
320  IF (eta > 0.1) THEN
321  fact = 1.0
322  ELSE IF (eta <= 0.1 .AND. eta > 0.01) THEN
323  fact = 10.0
324  ELSE
325  fact = 10.0
326  END IF
327  dist = eta*3.e-3 *fact
328  ! dist = eta*4.E-3 *fact
329 
330  eta_0 = eta
331  eta = eta_0 - 2.0*dist
332  CALL f_numerical
333  fres1 = fres
334  tfr_1 = tfr
335  eta = eta_0 - dist
336  CALL f_numerical
337  fres2 = fres
338  tfr_2 = tfr
339  eta = eta_0 + dist
340  CALL f_numerical
341  fres3 = fres
342  tfr_3 = tfr
343  eta = eta_0 + 2.0*dist
344  CALL f_numerical
345  fres4 = fres
346  tfr_4 = tfr
347  eta = eta_0
348  CALL f_numerical
349  fres5 = fres
350  tfr_5 = tfr
351 
352  !-----------------------------------------------------------------------------
353  ! ptfr = (-tfr_4+8.0*tfr_3-8.0*tfr_2+tfr_1)/(12.0*dist)
354  ! & *dzetdv*(KBOL*T)/1.E-30
355  ! ztfr =ptfr /( rho * (KBOL*t) / 1.E-30)
356  ! ptfrdz = (-tfr_4+16.0*tfr_3-3.d1*tfr_5+16.0*tfr_2-tfr_1)
357  ! & /(12.0*(dist**2 ))* dzetdv*(KBOL*T)/1.E-30
358  ! & + (-tfr_4+8.0*tfr_3-8.0*tfr_2+tfr_1)
359  ! & /(12.0*dist) * 2.0 *eta*6.0/PI/D
360  ! & *(KBOL*T)/1.E-30
361  ! ztfrdz=ptfrdz/( rho*(kbol*T)/1.E-30 ) - ztfr/eta
362  ! write (*,*) eta,ztfr,ztfrdz
363 
364  ! dtfr_dr = (-tfr_4+8.0*tfr_3-8.0*tfr_2+tfr_1)/(12.0*dist)
365  ! write (*,*) eta,dtfr_dr
366  ! stop
367  !-----------------------------------------------------------------------------
368 
369  df_dr = (-fres4+8.0*fres3-8.0*fres2+fres1) / (12.0*dist)
370  df_drdr = (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) &
371  /(12.0*(dist**2 ))
372 
373 
374  dzetdv = eta*rho
375 
376  pges = (-fres4+8.0*fres3-8.0*fres2+fres1) &
377  /(12.0*dist) *dzetdv*(kbol*t)/1.e-30
378 
379  dpiddz = 1.0/z3t*(kbol*t)/1.e-30
380  pgesdz = (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) &
381  /(12.0*(dist**2 ))* dzetdv*(kbol*t)/1.e-30 &
382  + (-fres4+8.0*fres3-8.0*fres2+fres1) /(12.0*dist) * 2.0 *rho &
383  *(kbol*t)/1.e-30 + dpiddz
384 
385  pgesd2 = (fres4-2.0*fres3+2.0*fres2-fres1) /(2.0*dist**3 ) &
386  * dzetdv*(kbol*t)/1.e-30 &
387  + (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) /(12.0*(dist**2 )) &
388  * 4.0 *rho *(kbol*t)/1.e-30 + (-fres4+8.0*fres3-8.0*fres2+fres1) &
389  /(12.0*dist) * 2.0 /z3t *(kbol*t)/1.e-30
390  pgesd3 = (fres4-4.0*fres3+6.0*fres5-4.0*fres2+fres1) /(dist**4 ) &
391  * dzetdv*(kbol*t)/1.e-30 + (fres4-2.0*fres3+2.0*fres2-fres1) &
392  /(2.0*dist**3 ) * 6.0 *rho *(kbol*t)/1.e-30 &
393  + (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) &
394  /(12.0*dist**2 )* 6.0 /z3t *(kbol*t)/1.e-30
395 
396  !------------------p ideal----------------------------------------------------
397  pideal = rho * (kbol*t) / 1.e-30
398 
399  !------------------p summation, p comes out in Pa ----------------------------
400  pges = pideal + pges
401 
402 END SUBROUTINE p_numerical
403 
404 
405 
406 !WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
407 !
408 !WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
409 
410 SUBROUTINE h_numerical
411 
412  USE parameters, ONLY: rgas
413  USE eos_variables
414 
415  !-----------------------------------------------------------------------------
416  REAL :: dist, fact, rho_0
417  REAL :: fres1,fres2,fres3,fres4,fres5
418  REAL :: f_1, f_2, f_3, f_4
419  REAL :: cv_res, t_tmp, zges
420  REAL :: f_dt, f_dtdt, f_dr, f_drdr, f_drdt
421  !-----------------------------------------------------------------------------
422 
423 
424  CALL perturbation_parameter
425  rho_0 = eta/z3t
426 
427 
428  fact = 1.0
429  dist = t * 100.e-5 * fact
430 
431  t_tmp = t
432 
433  t = t_tmp - 2.0*dist
434  CALL perturbation_parameter
435  eta = z3t*rho_0
436  CALL f_numerical
437  fres1 = fres
438  t = t_tmp - dist
439  CALL perturbation_parameter
440  eta = z3t*rho_0
441  CALL f_numerical
442  fres2 = fres
443  t = t_tmp + dist
444  CALL perturbation_parameter
445  eta = z3t*rho_0
446  CALL f_numerical
447  fres3 = fres
448  t = t_tmp + 2.0*dist
449  CALL perturbation_parameter
450  eta = z3t*rho_0
451  CALL f_numerical
452  fres4 = fres
453  t = t_tmp
454  CALL perturbation_parameter
455  eta = z3t*rho_0
456  CALL f_numerical
457  fres5 = fres
458  ! *(KBOL*T)/1.E-30
459 
460  zges = (p * 1.e-30)/(kbol*t*rho_0)
461 
462 
463  f_dt = (-fres4+8.0*fres3-8.0*fres2+fres1)/(12.0*dist)
464  f_dtdt = (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) /(12.0*(dist**2 ))
465 
466  s_res = (- f_dt -fres/t)*rgas*t + rgas * log(zges)
467  h_res = ( - t*f_dt + zges-1.0 ) * rgas*t
468  cv_res = -( t*f_dtdt + 2.0*f_dt ) * rgas*t
469 
470 
471 
472  t = t_tmp - 2.0*dist
473  CALL perturbation_parameter
474  eta = z3t*rho_0
475  CALL p_numerical
476  f_1 = pges/(eta*rho_0*(kbol*t)/1.e-30)
477 
478  t = t_tmp - dist
479  CALL perturbation_parameter
480  eta = z3t*rho_0
481  CALL p_numerical
482  f_2 = pges/(eta*rho_0*(kbol*t)/1.e-30)
483 
484  t = t_tmp + dist
485  CALL perturbation_parameter
486  eta = z3t*rho_0
487  CALL p_numerical
488  f_3 = pges/(eta*rho_0*(kbol*t)/1.e-30)
489 
490  t = t_tmp + 2.0*dist
491  CALL perturbation_parameter
492  eta = z3t*rho_0
493  CALL p_numerical
494  f_4 = pges/(eta*rho_0*(kbol*t)/1.e-30)
495 
496  t = t_tmp
497  CALL perturbation_parameter
498  eta = z3t*rho_0
499  CALL p_numerical
500 
501  f_dr = pges / (eta*rho_0*(kbol*t)/1.e-30)
502  f_drdr = pgesdz/ (eta*rho_0*(kbol*t)/1.e-30) - f_dr*2.0/eta - 1.0/eta**2
503 
504  f_drdt = ( - f_4 + 8.0*f_3 - 8.0*f_2 + f_1 ) / ( 12.0*dist )
505 
506  cp_res = cv_res - rgas + rgas*( zges + eta*t*f_drdt)**2 / (1.0 + 2.0*eta*f_dr + eta**2 *f_drdr)
507  ! write (*,*) cv_res,cp_res,eta
508 
509 
510 END SUBROUTINE h_numerical
511 
512 END MODULE eos_numerical
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains constant...
Definition: modules.f90:6
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
Definition: modules.f90:200
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Module DFT_MODULE This module...
Definition: modules.f90:272
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
Definition: modules.f90:120
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
Definition: modules.f90:220