FV3 Bundle
NLTE_Predictor_IO.f90
Go to the documentation of this file.
1 !
2 ! NLTE_Predictor_IO
3 !
4 ! Module containing routines to read and write Binary format
5 ! NLTE_Predictor data files.
6 !
7 !
8 ! CREATION HISTORY:
9 ! Written by: Paul van Delst, 15-Mar-2011
10 ! paul.vandelst@noaa.gov
11 !
12 
14 
15  ! ------------------
16  ! Environment set up
17  ! ------------------
18  ! Module use
19  USE type_kinds , ONLY: long, double
27  ! Disable implicit typing
28  IMPLICIT NONE
29 
30 
31  ! ------------
32  ! Visibilities
33  ! ------------
34  PRIVATE
36  PUBLIC :: nlte_predictor_readfile
37  PUBLIC :: nlte_predictor_writefile
38  PUBLIC :: nlte_predictor_ioversion
39 
40 
41  ! -----------------
42  ! Module parameters
43  ! -----------------
44  CHARACTER(*), PRIVATE, PARAMETER :: module_version_id = &
45  '$Id: NLTE_Predictor_IO.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $'
46  CHARACTER(*), PARAMETER :: write_error_status = 'DELETE'
47  ! Default message length
48  INTEGER, PARAMETER :: ml = 256
49 
50 
51 CONTAINS
52 
53 
54 !################################################################################
55 !################################################################################
56 !## ##
57 !## ## PUBLIC MODULE ROUTINES ## ##
58 !## ##
59 !################################################################################
60 !################################################################################
61 
62 !------------------------------------------------------------------------------
63 !:sdoc+:
64 !
65 ! NAME:
66 ! NLTE_Predictor_InquireFile
67 !
68 ! PURPOSE:
69 ! Function to inquire a Binary format NLTE_Predictor file.
70 !
71 ! CALLING SEQUENCE:
72 ! Error_Status = NLTE_Predictor_InquireFile( &
73 ! Filename , &
74 ! n_Profiles = n_Profiles, &
75 ! Release = Release , &
76 ! Version = Version )
77 !
78 ! INPUTS:
79 ! Filename: Character string specifying the name of the NLTE
80 ! predictor data file to inquire.
81 ! UNITS: N/A
82 ! TYPE: CHARACTER(*)
83 ! DIMENSION: Scalar
84 ! ATTRIBUTES: INTENT(IN)
85 !
86 ! OPTIONAL OUTPUTS:
87 ! n_Profiles: The number of profiles for which there is NLTE
88 ! predictor information in the data file.
89 ! UNITS: N/A
90 ! TYPE: INTEGER
91 ! DIMENSION: Scalar
92 ! ATTRIBUTES: OPTIONAL, INTENT(OUT)
93 !
94 ! Release: The data/file release number. Used to check
95 ! for data/software mismatch.
96 ! UNITS: N/A
97 ! TYPE: INTEGER
98 ! DIMENSION: Scalar
99 ! ATTRIBUTES: INTENT(OUT), OPTIONAL
100 !
101 ! Version: The data/file version number. Used for
102 ! purposes only in identifying the dataset for
103 ! a particular release.
104 ! UNITS: N/A
105 ! TYPE: INTEGER
106 ! DIMENSION: Scalar
107 ! ATTRIBUTES: INTENT(OUT), OPTIONAL
108 !
109 ! FUNCTION RESULT:
110 ! Error_Status: The return value is an integer defining the error
111 ! status. The error codes are defined in the
112 ! Message_Handler module.
113 ! If == SUCCESS the file inquire was successful
114 ! == FAILURE an unrecoverable error occurred.
115 ! UNITS: N/A
116 ! TYPE: INTEGER
117 ! DIMENSION: Scalar
118 !
119 !:sdoc-:
120 !------------------------------------------------------------------------------
121 
122  FUNCTION nlte_predictor_inquirefile( &
123  Filename , & ! Input
124  n_Profiles, & ! Optional output
125  Release , & ! Optional Output
126  Version ) & ! Optional Output
127  result( err_stat )
128  ! Arguments
129  CHARACTER(*), INTENT(IN) :: filename
130  INTEGER , OPTIONAL, INTENT(OUT) :: n_profiles
131  INTEGER , OPTIONAL, INTENT(OUT) :: release
132  INTEGER , OPTIONAL, INTENT(OUT) :: version
133  ! Function result
134  INTEGER :: err_stat
135  ! Function parameters
136  CHARACTER(*), PARAMETER :: routine_name = 'NLTE_Predictor_InquireFile'
137  ! Function variables
138  CHARACTER(ML) :: msg
139  INTEGER :: io_stat
140  INTEGER :: fid
141  INTEGER :: rel, ver, m
142 
143 
144  ! Setup
145  err_stat = success
146  ! ...Check that the file exists
147  IF ( .NOT. file_exists( filename ) ) THEN
148  msg = 'File '//trim(filename)//' not found.'
149  CALL inquire_cleanup(); RETURN
150  END IF
151 
152 
153  ! Open the file
154  err_stat = open_binary_file( filename, fid )
155  IF ( err_stat /= success ) THEN
156  msg = 'Error opening '//trim(filename)
157  CALL inquire_cleanup(); RETURN
158  END IF
159 
160 
161  ! Read the release and version
162  READ( fid, iostat=io_stat ) rel, ver
163  IF ( io_stat /= 0 ) THEN
164  WRITE( msg,'("Error reading Release/Version. IOSTAT = ",i0)' ) io_stat
165  CALL inquire_cleanup(); RETURN
166  END IF
167 
168 
169  ! Read the number of profiles
170  READ( fid, iostat=io_stat ) m
171  IF ( io_stat /= 0 ) THEN
172  WRITE( msg,'("Error reading dimensions from ",a,". IOSTAT = ",i0)' ) trim(filename), io_stat
173  CALL inquire_cleanup(); RETURN
174  END IF
175 
176 
177  ! Close the file
178  CLOSE( fid, iostat=io_stat )
179  IF ( io_stat /= 0 ) THEN
180  WRITE( msg,'("Error closing ",a,". IOSTAT = ",i0)' ) trim(filename), io_stat
181  CALL inquire_cleanup(); RETURN
182  END IF
183 
184 
185  ! Assign the return arguments
186  IF ( PRESENT(n_profiles) ) n_profiles = m
187  IF ( PRESENT(release ) ) release = rel
188  IF ( PRESENT(version ) ) version = ver
189 
190  CONTAINS
191 
192  SUBROUTINE inquire_cleanup()
193  ! Close file if necessary
194  IF ( file_open(fid) ) THEN
195  CLOSE( fid, iostat=io_stat )
196  IF ( io_stat /= 0 ) &
197  msg = trim(msg)//'; Error closing input file during error cleanup'
198  END IF
199  ! Set error status and print error message
200  err_stat = failure
201  CALL display_message( routine_name, msg, err_stat )
202  END SUBROUTINE inquire_cleanup
203 
204  END FUNCTION nlte_predictor_inquirefile
205 
206 
207 !--------------------------------------------------------------------------------
208 !:sdoc+:
209 !
210 ! NAME:
211 ! NLTE_Predictor_ReadFile
212 !
213 ! PURPOSE:
214 ! Function to read NLTE_Predictor object files in Binary format.
215 !
216 ! CALLING SEQUENCE:
217 ! Error_Status = NLTE_Predictor_ReadFile( &
218 ! Filename , &
219 ! NLTE_Predictor, &
220 ! Quiet = Quiet , &
221 ! n_Profiles = n_Profiles )
222 !
223 ! INPUTS:
224 ! Filename: Character string specifying the name of a
225 ! NLTE_Predictor format data file to read.
226 ! UNITS: N/A
227 ! TYPE: CHARACTER(*)
228 ! DIMENSION: Scalar
229 ! ATTRIBUTES: INTENT(IN)
230 !
231 ! OUTPUTS:
232 ! NLTE_Predictor: NLTE_Predictor object containing the NLTE correction
233 ! algorithm predictor data.
234 ! UNITS: N/A
235 ! TYPE: NLTE_Predictor_type
236 ! DIMENSION: Rank-1
237 ! ATTRIBUTES: INTENT(OUT)
238 !
239 ! OPTIONAL INPUTS:
240 ! Quiet: Set this logical argument to suppress INFORMATION
241 ! messages being printed to stdout
242 ! If == .FALSE., INFORMATION messages are OUTPUT [DEFAULT].
243 ! == .TRUE., INFORMATION messages are SUPPRESSED.
244 ! If not specified, default is .FALSE.
245 ! UNITS: N/A
246 ! TYPE: LOGICAL
247 ! DIMENSION: Scalar
248 ! ATTRIBUTES: INTENT(IN), OPTIONAL
249 !
250 ! OPTIONAL OUTPUTS:
251 ! n_Profiles: The number of profiles for which data was read.
252 ! UNITS: N/A
253 ! TYPE: INTEGER
254 ! DIMENSION: Scalar
255 ! ATTRIBUTES: OPTIONAL, INTENT(OUT)
256 !
257 ! FUNCTION RESULT:
258 ! Error_Status: The return value is an integer defining the error status.
259 ! The error codes are defined in the Message_Handler module.
260 ! If == SUCCESS, the file read was successful
261 ! == FAILURE, an unrecoverable error occurred.
262 ! UNITS: N/A
263 ! TYPE: INTEGER
264 ! DIMENSION: Scalar
265 !
266 !:sdoc-:
267 !------------------------------------------------------------------------------
268 
269  FUNCTION nlte_predictor_readfile( &
270  Filename , & ! Input
271  NLTE_Predictor, & ! Output
272  Quiet , & ! Optional input
273  n_Profiles , & ! Optional output
274  Debug ) & ! Optional input (Debug output control)
275  result( err_stat )
276  ! Arguments
277  CHARACTER(*), INTENT(IN) :: filename
278  TYPE(nlte_predictor_type), INTENT(OUT) :: nlte_predictor(:)
279  LOGICAL, OPTIONAL, INTENT(IN) :: quiet
280  INTEGER, OPTIONAL, INTENT(OUT) :: n_profiles
281  LOGICAL, OPTIONAL, INTENT(IN) :: debug
282  ! Function result
283  INTEGER :: err_stat
284  ! Function parameters
285  CHARACTER(*), PARAMETER :: routine_name = 'NLTE_Predictor_ReadFile'
286  ! Function variables
287  CHARACTER(ML) :: msg
288  LOGICAL :: noisy
289  INTEGER :: io_stat
290  INTEGER :: fid
291  INTEGER :: n_file_profiles
292  INTEGER :: m, n_input_profiles
293  TYPE(nlte_predictor_type) :: dummy
294 
295 
296  ! Setup
297  err_stat = success
298  ! ...Check Quiet argument
299  noisy = .true.
300  IF ( PRESENT(quiet) ) noisy = .NOT. quiet
301  ! ...Override Quiet settings if debug set.
302  IF ( PRESENT(debug) ) THEN
303  IF ( debug ) noisy = .true.
304  END IF
305 
306 
307  ! Open the file if it exists
308  IF ( file_exists( filename ) ) THEN
309  err_stat = open_binary_file( filename, fid )
310  IF ( err_stat /= success ) THEN
311  msg = 'Error opening '//trim(filename)
312  CALL read_cleanup(); RETURN
313  END IF
314  ELSE
315  msg = 'File '//trim(filename)//' not found.'
316  CALL read_cleanup(); RETURN
317  END IF
318 
319 
320  ! Read and check the release and version
321  READ( fid, iostat=io_stat ) dummy%Release, dummy%Version
322  IF ( io_stat /= 0 ) THEN
323  WRITE( msg,'("Error reading Release/Version. IOSTAT = ",i0)' ) io_stat
324  CALL read_cleanup(); RETURN
325  END IF
326  IF ( .NOT. nlte_predictor_validrelease( dummy ) ) THEN
327  msg = 'NLTE_Predictor Release check failed.'
328  CALL read_cleanup(); RETURN
329  END IF
330 
331 
332  ! Read the dimensions
333  READ( fid, iostat=io_stat ) n_file_profiles
334  IF ( io_stat /= 0 ) THEN
335  WRITE( msg,'("Error reading profile dimension from ",a,". IOSTAT = ",i0)' ) &
336  trim(filename), io_stat
337  CALL read_cleanup(); RETURN
338  END IF
339  ! ...Check if n_Profiles in file is > size of output array
340  n_input_profiles = SIZE(nlte_predictor)
341  IF ( n_file_profiles > n_input_profiles ) THEN
342  WRITE( msg,'("Number of profiles, ",i0," > size of the output NLTE_Predictor ", &
343  &" array, ",i0,". Only the first ",i0, &
344  &" profiles will be read.")' ) &
345  n_file_profiles, n_input_profiles, n_input_profiles
346  CALL display_message( routine_name, msg, warning )
347  END IF
348  n_input_profiles = min(n_input_profiles, n_file_profiles)
349 
350 
351  ! Loop over all the profiles
352  profile_loop: DO m = 1, n_input_profiles
353 
354  ! Read the NLTE predictor data
355  ! ...Read the dimensions
356  READ( fid, iostat=io_stat ) &
357  nlte_predictor(m)%n_Layers , &
358  nlte_predictor(m)%n_Predictors
359  IF ( io_stat /= 0 ) THEN
360  WRITE( msg,'("Error reading data dimensions for profile ",i0, &
361  &". IOSTAT = ",i0)' ) m, io_stat
362  CALL read_cleanup(); RETURN
363  END IF
364  ! ...Read the logical indicators
365  READ( fid, iostat=io_stat ) &
366  nlte_predictor(m)%Is_Active , &
367  nlte_predictor(m)%Compute_Tm
368  IF ( io_stat /= 0 ) THEN
369  WRITE( msg,'("Error reading logical indicators for profile ",i0, &
370  &". IOSTAT = ",i0)' ) m, io_stat
371  CALL read_cleanup(); RETURN
372  END IF
373  ! ...Read the array indices
374  READ( fid, iostat=io_stat ) &
375  nlte_predictor(m)%k1, &
376  nlte_predictor(m)%k2, &
377  nlte_predictor(m)%isen, &
378  nlte_predictor(m)%isol
379  IF ( io_stat /= 0 ) THEN
380  WRITE( msg,'("Error reading array indices for profile ",i0, &
381  &". IOSTAT = ",i0)' ) m, io_stat
382  CALL read_cleanup(); RETURN
383  END IF
384  ! ...Read the predictors and interpolation weights
385  READ( fid, iostat=io_stat ) &
386  nlte_predictor(m)%Tm , &
387  nlte_predictor(m)%Predictor, &
388  nlte_predictor(m)%w
389  IF ( io_stat /= 0 ) THEN
390  WRITE( msg,'("Error reading predictors and interpolation weights for profile ",i0, &
391  &". IOSTAT = ",i0)' ) m, io_stat
392  CALL read_cleanup(); RETURN
393  END IF
394 
395  ! Explicitly assign the version number
396  nlte_predictor(m)%Version = dummy%Version
397 
398  END DO profile_loop
399 
400 
401  ! Close the file
402  CLOSE( fid, iostat=io_stat )
403  IF ( io_stat /= 0 ) THEN
404  WRITE( msg,'("Error closing ",a,". IOSTAT = ",i0)' ) trim(filename), io_stat
405  CALL read_cleanup(); RETURN
406  END IF
407 
408 
409  ! Set the return values
410  IF ( PRESENT(n_profiles) ) n_profiles = n_input_profiles
411 
412 
413  ! Output an info message
414  IF ( noisy ) THEN
415  WRITE( msg,'("Number of profiles read from ",a,": ",i0)' ) trim(filename), n_input_profiles
416  CALL display_message( routine_name, trim(msg), information )
417  END IF
418 
419  CONTAINS
420 
421  SUBROUTINE read_cleanup()
422  IF ( file_open(filename) ) THEN
423  CLOSE( fid, iostat=io_stat )
424  IF ( io_stat /= 0 ) &
425  msg = trim(msg)//'; Error closing input file during error cleanup.'
426  END IF
427  CALL nlte_predictor_destroy( nlte_predictor )
428  err_stat = failure
429  CALL display_message( routine_name, msg, err_stat )
430  END SUBROUTINE read_cleanup
431 
432  END FUNCTION nlte_predictor_readfile
433 
434 
435 !--------------------------------------------------------------------------------
436 !:sdoc+:
437 !
438 ! NAME:
439 ! NLTE_Predictor_WriteFile
440 !
441 ! PURPOSE:
442 ! Function to write NLTE_Predictor object files in Binary format.
443 !
444 ! CALLING SEQUENCE:
445 ! Error_Status = NLTE_Predictor_WriteFile( &
446 ! Filename , &
447 ! NLTE_Predictor , &
448 ! Quiet = Quiet )
449 !
450 ! INPUTS:
451 ! Filename: Character string specifying the name of a
452 ! NLTE_Predictor format data file to read.
453 ! UNITS: N/A
454 ! TYPE: CHARACTER(*)
455 ! DIMENSION: Scalar
456 ! ATTRIBUTES: INTENT(IN)
457 !
458 ! NLTE_Predictor: NLTE_Predictor object containing the NLTE correction
459 ! algorithm predictor data.
460 ! UNITS: N/A
461 ! TYPE: NLTE_Predictor_type
462 ! DIMENSION: Rank-1
463 ! ATTRIBUTES: INTENT(OUT)
464 !
465 ! OPTIONAL INPUTS:
466 ! Quiet: Set this logical argument to suppress INFORMATION
467 ! messages being printed to stdout
468 ! If == .FALSE., INFORMATION messages are OUTPUT [DEFAULT].
469 ! == .TRUE., INFORMATION messages are SUPPRESSED.
470 ! If not specified, default is .FALSE.
471 ! UNITS: N/A
472 ! TYPE: LOGICAL
473 ! DIMENSION: Scalar
474 ! ATTRIBUTES: INTENT(IN), OPTIONAL
475 !
476 ! FUNCTION RESULT:
477 ! Error_Status: The return value is an integer defining the error status.
478 ! The error codes are defined in the Message_Handler module.
479 ! If == SUCCESS, the file write was successful
480 ! == FAILURE, an unrecoverable error occurred.
481 ! UNITS: N/A
482 ! TYPE: INTEGER
483 ! DIMENSION: Scalar
484 !
485 !:sdoc-:
486 !------------------------------------------------------------------------------
487 
488  FUNCTION nlte_predictor_writefile( &
489  Filename , & ! Input
490  NLTE_Predictor, & ! Input
491  Quiet , & ! Optional input
492  Debug ) & ! Optional input (Debug output control)
493  result( err_stat )
494  ! Arguments
495  CHARACTER(*), INTENT(IN) :: filename
496  TYPE(nlte_predictor_type), INTENT(IN) :: nlte_predictor(:)
497  LOGICAL, OPTIONAL, INTENT(IN) :: quiet
498  LOGICAL, OPTIONAL, INTENT(IN) :: debug
499  ! Function result
500  INTEGER :: err_stat
501  ! Function parameters
502  CHARACTER(*), PARAMETER :: routine_name = 'NLTE_Predictor_WriteFile'
503  ! Function variables
504  CHARACTER(ML) :: msg
505  LOGICAL :: noisy
506  INTEGER :: io_stat
507  INTEGER :: fid
508  INTEGER :: m, n_output_profiles
509 
510 
511  ! Setup
512  err_stat = success
513  ! ...Check Quiet argument
514  noisy = .true.
515  IF ( PRESENT(quiet) ) noisy = .NOT. quiet
516  ! ...Override Quiet settings if debug set.
517  IF ( PRESENT(debug) ) THEN
518  IF ( debug ) noisy = .true.
519  END IF
520 
521 
522  ! Open the file for output
523  err_stat = open_binary_file( filename, fid, for_output=.true. )
524  IF ( err_stat /= success ) THEN
525  msg = 'Error opening '//trim(filename)
526  CALL write_cleanup(); RETURN
527  END IF
528 
529 
530  ! Write the release and version
531  WRITE( fid,iostat=io_stat ) nlte_predictor(1)%Release, nlte_predictor(1)%Version
532  IF ( io_stat /= 0 ) THEN
533  WRITE( msg,'("Error writing Release/Version. IOSTAT = ",i0)' ) io_stat
534  CALL write_cleanup(); RETURN
535  END IF
536 
537 
538  ! Write the dimensions
539  n_output_profiles = SIZE(nlte_predictor)
540  WRITE( fid, iostat=io_stat ) n_output_profiles
541  IF ( io_stat /= 0 ) THEN
542  WRITE( msg,'("Error writing profile dimension to ",a,". IOSTAT = ",i0)' ) &
543  trim(filename), io_stat
544  CALL write_cleanup(); RETURN
545  END IF
546 
547 
548  ! Loop over all the profiles
549  profile_loop: DO m = 1, n_output_profiles
550 
551  ! Write the NLTE predictor data
552  ! ...Write the dimensions
553  WRITE( fid, iostat=io_stat ) &
554  nlte_predictor(m)%n_Layers , &
555  nlte_predictor(m)%n_Predictors
556  IF ( io_stat /= 0 ) THEN
557  WRITE( msg,'("Error writing data dimensions for profile ",i0, &
558  &". IOSTAT = ",i0)' ) m, io_stat
559  CALL write_cleanup(); RETURN
560  END IF
561  ! ...Write the logical indicators
562  WRITE( fid, iostat=io_stat ) &
563  nlte_predictor(m)%Is_Active , &
564  nlte_predictor(m)%Compute_Tm
565  IF ( io_stat /= 0 ) THEN
566  WRITE( msg,'("Error writing logical indicators for profile ",i0, &
567  &". IOSTAT = ",i0)' ) m, io_stat
568  CALL write_cleanup(); RETURN
569  END IF
570  ! ...Write the array indices
571  WRITE( fid, iostat=io_stat ) &
572  nlte_predictor(m)%k1, &
573  nlte_predictor(m)%k2, &
574  nlte_predictor(m)%isen, &
575  nlte_predictor(m)%isol
576  IF ( io_stat /= 0 ) THEN
577  WRITE( msg,'("Error writing array indices for profile ",i0, &
578  &". IOSTAT = ",i0)' ) m, io_stat
579  CALL write_cleanup(); RETURN
580  END IF
581  ! ...Write the predictors and interpolation weights
582  WRITE( fid, iostat=io_stat ) &
583  nlte_predictor(m)%Tm , &
584  nlte_predictor(m)%Predictor, &
585  nlte_predictor(m)%w
586  IF ( io_stat /= 0 ) THEN
587  WRITE( msg,'("Error writing predictors and interpolation weights for profile ",i0, &
588  &". IOSTAT = ",i0)' ) m, io_stat
589  CALL write_cleanup(); RETURN
590  END IF
591 
592  END DO profile_loop
593 
594 
595  ! Close the file
596  CLOSE( fid, iostat=io_stat )
597  IF ( io_stat /= 0 ) THEN
598  WRITE( msg,'("Error closing ",a,". IOSTAT = ",i0)' ) trim(filename), io_stat
599  CALL write_cleanup(); RETURN
600  END IF
601 
602 
603  ! Output an info message
604  IF ( noisy ) THEN
605  WRITE( msg,'("Number of profiles written to ",a,": ",i0)' ) trim(filename), n_output_profiles
606  CALL display_message( routine_name, trim(msg), information )
607  END IF
608 
609  CONTAINS
610 
611  SUBROUTINE write_cleanup()
612  IF ( file_open(filename) ) THEN
613  CLOSE( fid, iostat=io_stat, status=write_error_status )
614  IF ( io_stat /= 0 ) &
615  msg = trim(msg)//'; Error closing output file during error cleanup.'
616  END IF
617  err_stat = failure
618  CALL display_message( routine_name, msg, err_stat )
619  END SUBROUTINE write_cleanup
620 
621  END FUNCTION nlte_predictor_writefile
622 
623 
624 !--------------------------------------------------------------------------------
625 !:sdoc+:
626 !
627 ! NAME:
628 ! NLTE_Predictor_IOVersion
629 !
630 ! PURPOSE:
631 ! Subroutine to return the module version information.
632 !
633 ! CALLING SEQUENCE:
634 ! CALL NLTE_Predictor_IOVersion( Id )
635 !
636 ! OUTPUT ARGUMENTS:
637 ! Id: Character string containing the version Id information
638 ! for the module.
639 ! UNITS: N/A
640 ! TYPE: CHARACTER(*)
641 ! DIMENSION: Scalar
642 ! ATTRIBUTES: INTENT(OUT)
643 !
644 !:sdoc-:
645 !--------------------------------------------------------------------------------
646 
647  SUBROUTINE nlte_predictor_ioversion( Id )
648  CHARACTER(*), INTENT(OUT) :: id
649  id = module_version_id
650  END SUBROUTINE nlte_predictor_ioversion
651 
652 END MODULE nlte_predictor_io
integer, parameter, public failure
integer function, public nlte_predictor_writefile(Filename, NLTE_Predictor, Quiet, Debug)
elemental subroutine, public nlte_predictor_destroy(NLTE_Predictor)
integer, parameter, public warning
integer, parameter, public long
Definition: Type_Kinds.f90:76
logical function, public nlte_predictor_validrelease(NLTE_Predictor)
subroutine, public nlte_predictor_info(NLTE_Predictor, Info)
character(*), parameter write_error_status
integer, parameter, public double
Definition: Type_Kinds.f90:106
character(*), parameter, private module_version_id
subroutine, public nlte_predictor_ioversion(Id)
subroutine inquire_cleanup()
integer, parameter ml
subroutine read_cleanup()
subroutine write_cleanup()
integer function, public open_binary_file(Filename, FileID, For_Output, No_Check)
recursive subroutine, public display_message(Routine_Name, Message, Error_State, Message_Log)
integer function, public nlte_predictor_inquirefile(Filename, n_Profiles, Release, Version)
#define min(a, b)
Definition: mosaic_util.h:32
integer function, public nlte_predictor_readfile(Filename, NLTE_Predictor, Quiet, n_Profiles, Debug)
integer, parameter, public success
integer, parameter, public information