Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Different CHARACTER lengths (3/4) in array constructor, how to trim strings - fortran

According to an answer to a similar question, I have declared the characters as indicated here gfortran does not allow character arrays with varying component lengths . However I would like to use a trim function because I need to add spaces to manually pad the names and these variables are then used in another part of the code. Can I trim at the same time as creating the array?

Error: Different CHARACTER lengths (3/4) in array constructor at (1)

If I add random characters to make them the same length it works but I can't do that for obvious reasons. I have compiled both with gfortran and mpif90 with same results

use mod_maxdims , only : maxstr
integer, parameter :: nvars_ncep = 12

character(len=maxstr), parameter, dimension(nvars_ncep) :: vars_ncep =                  &
                           (/ 'air'              & ! Air temperature                  [      K]
                            , 'pres'             & ! Pressure                         [     Pa]
                            , 'rhum'             & ! Relative humidity                [      %]
                            , 'uwnd'             & ! Zonal wind                       [    m/s]
                            , 'vwnd'             & ! Zonal wind                       [    m/s]
                            , 'pres'             & ! Pressure                         [     Pa]
                            , 'dlwrf'            & ! Downward long wave radiation     [   W/m2]
                            , 'nbdsf'            & ! Near-IR beam radiation           [   W/m2]
                            , 'nddsf'            & ! Near-IR diffuse radiation        [   W/m2]
                            , 'vbdsf'            & ! Visible beam radiation           [   W/m2]
                            , 'vddsf'            & ! Visible beam radiation           [   W/m2]
                            , 'prate'           /) ! Precipitation rate               [kg/m2/s]
like image 477
Herman Toothrot Avatar asked Apr 17 '15 10:04

Herman Toothrot


1 Answers

gfortran is preventing you from writing non-standard code; it's the language standard which forbids it, not the implementation.

If you initialise a character array as you have done then all the entries must have the same length. In your case you would have to pad each shorter entry with enough spaces to make them all equally long.

The alternative would be to insert the entries when program execution starts. If you write something like vars_ncep(1) = 'air' then the additional characters will be set to spaces, the compiler will take care of that for you. This however, would mean that your array could not be a parameter.

like image 94
High Performance Mark Avatar answered Sep 19 '22 14:09

High Performance Mark