forked from 3rdparty/wrf-python
79 changed files with 6176 additions and 1723 deletions
@ -0,0 +1,8 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
cd ../fortran |
||||||
|
gfortran -E ompgen.F90 -cpp -o omp.f90 |
||||||
|
f2py *.f90 -m _wrffortran -h wrffortran.pyf --overwrite-signature |
||||||
|
cd .. |
||||||
|
python setup.py clean --all |
||||||
|
python setup.py config_fc --f90flags="-mtune=generic" build_ext build |
@ -0,0 +1,9 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
cd ../fortran |
||||||
|
gfortran -E ompgen.F90 -fopenmp -cpp -o omp.f90 |
||||||
|
f2py *.f90 -m _wrffortran -h wrffortran.pyf --overwrite-signature --no-wrap-functions |
||||||
|
cd .. |
||||||
|
python setup.py clean --all |
||||||
|
python setup.py config_fc --f90flags="-mtune=generic -fopenmp" build_ext --libraries="gomp" build |
||||||
|
|
@ -1,240 +1,256 @@ |
|||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| Variable Name | Description | Available Units | Additional Keyword Arguments | |
| Variable Name | Description | Available Units | Additional Keyword Arguments | |
||||||
+====================+===============================================================+=============================+===============================================================================================+ |
+====================+===============================================================+=============================+=========================================================================================================================================================+ |
||||||
| avo | Absolute Vorticity | 10-5 s-1 | | |
| avo | Absolute Vorticity | 10-5 s-1 | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| eth/theta_e | Equivalent Potential Temperature | K | **units** (str) : Set to desired units. Default is *'K'*. | |
| eth/theta_e | Equivalent Potential Temperature | K | **units** (str) : Set to desired units. Default is *'K'*. | |
||||||
| | | | | |
| | | | | |
||||||
| | | degC | | |
| | | degC | | |
||||||
| | | | | |
| | | | | |
||||||
| | | degF | | |
| | | degF | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| cape_2d | 2D cape (mcape/mcin/lcl/lfc) | J kg-1 ; J kg-1 ; m ; m | **missing** (float): Fill value for output only | |
| cape_2d | 2D cape (mcape/mcin/lcl/lfc) | J kg-1 ; J kg-1 ; m ; m | **missing** (float): Fill value for output only | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| cape_3d | 3D cape and cin | J kg-1 | **missing** (float): Fill value for output only | |
| cape_3d | 3D cape and cin | J kg-1 | **missing** (float): Fill value for output only | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| ctt | Cloud Top Temperature | degC | **units** (str) : Set to desired units. Default is *'degC'*. | |
| ctt | Cloud Top Temperature | degC | **units** (str) : Set to desired units. Default is *'degC'*. | |
||||||
| | | | | |
| | | | | |
||||||
| | | K | | |
| | | K | | |
||||||
| | | | | |
| | | | | |
||||||
| | | degF | | |
| | | degF | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| cloudfrac | Cloud Fraction | % | | |
| cloudfrac | Cloud Fraction | % | **vert_type** (str): The vertical coordinate type for the cloud thresholds. Must be 'height_agl', 'height_msl', or 'pres'. Default is 'height_agl'. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| dbz | Reflectivity | dBZ | **do_variant** (boolean): Set to True to enable variant calculation. Default is *False*. | |
| | | | **low_thresh** (float): The low cloud threshold (meters for 'height_agl' and 'height_msl', pascals for 'pres'). Default is 300 m (97000 Pa) | |
||||||
| | | | | |
| | | | | |
||||||
| | | | **do_liqskin** (boolean): Set to True to enable liquid skin calculation. Default is *False*. | |
| | | | **mid_thresh** (float): The mid cloud threshold (meters for 'height_agl' and 'height_msl', pascals for 'pres'). Default is 2000 m (80000 Pa) | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| mdbz | Maximum Reflectivity | dBZ | **do_variant** (boolean): Set to True to enable variant calculation. Default is *False*. | |
| | | | **high_thresh** (float): The high cloud threshold (meters for 'height_agl' and 'height_msl', pascals for 'pres'). Default is 6000 m (45000 Pa) | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | | **do_liqskin** (boolean): Set to True to enable liquid skin calculation. Default is *False*. | |
| dbz | Reflectivity | dBZ | **do_variant** (boolean): Set to True to enable variant calculation. Default is *False*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| geopt/geopotential | Full Model Geopotential | m2 s-2 | | |
| | | | **do_liqskin** (boolean): Set to True to enable liquid skin calculation. Default is *False*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| helicity | Storm Relative Helicity | m2 s-2 | **top** (float): The top level for the calculation in meters. Default is *3000.0*. | |
| mdbz | Maximum Reflectivity | dBZ | **do_variant** (boolean): Set to True to enable variant calculation. Default is *False*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| lat | Latitude | decimal degrees | | |
| | | | **do_liqskin** (boolean): Set to True to enable liquid skin calculation. Default is *False*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| lon | Longitude | decimal degrees | | |
| geopt/geopotential | Geopotential for the Mass Grid | m2 s-2 | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| omg/omega | Omega | Pa s-1 | | |
| geopt_stag | Geopotential for the Vertically Staggered Grid | m2 s-2 | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| p/pres | Full Model Pressure | Pa | **units** (str) : Set to desired units. Default is *'Pa'*. | |
| helicity | Storm Relative Helicity | m2 s-2 | **top** (float): The top level for the calculation in meters. Default is *3000.0*. | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | (in specified units) | hPa | | |
| lat | Latitude | decimal degrees | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | mb | | |
| lon | Longitude | decimal degrees | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | torr | | |
| omg/omega | Omega | Pa s-1 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | mmhg | | |
| p/pres | Full Model Pressure | Pa | **units** (str) : Set to desired units. Default is *'Pa'*. | |
||||||
| | | | | |
| | | | | |
||||||
| | | atm | | |
| | (in specified units) | hPa | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| pressure | Full Model Pressure (hPa) | hPa | | |
| | | mb | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| pvo | Potential Vorticity | PVU | | |
| | | torr | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| pw | Precipitable Water | kg m-2 | | |
| | | mmhg | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| rh | Relative Humidity | % | | |
| | | atm | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| rh2 | 2m Relative Humidity | % | | |
| pressure | Full Model Pressure (hPa) | hPa | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| slp | Sea Level Pressure | hPa | **units** (str) : Set to desired units. Default is *'hPa'*. | |
| pvo | Potential Vorticity | PVU | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | hPa | | |
| pw | Precipitable Water | kg m-2 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | mb | | |
| rh | Relative Humidity | % | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | torr | | |
| rh2 | 2m Relative Humidity | % | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | mmhg | | |
| slp | Sea Level Pressure | hPa | **units** (str) : Set to desired units. Default is *'hPa'*. | |
||||||
| | | | | |
| | | | | |
||||||
| | | atm | | |
| | | hPa | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| ter | Model Terrain Height | m | **units** (str) : Set to desired units. Default is *'m'*. | |
| | | mb | | |
||||||
| | | | | |
| | | | | |
||||||
| | | km | | |
| | | torr | | |
||||||
| | | | | |
| | | | | |
||||||
| | | dm | | |
| | | mmhg | | |
||||||
| | | | | |
| | | | | |
||||||
| | | ft | | |
| | | atm | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | mi | | |
| ter | Model Terrain Height | m | **units** (str) : Set to desired units. Default is *'m'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| td2 | 2m Dew Point Temperature | degC | **units** (str) : Set to desired units. Default is *'degC'*. | |
| | | km | | |
||||||
| | | | | |
| | | | | |
||||||
| | | K | | |
| | | dm | | |
||||||
| | | | | |
| | | | | |
||||||
| | | degF | | |
| | | ft | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| td | Dew Point Temperature | degC | **units** (str) : Set to desired units. Default is *'degC'*. | |
| | | mi | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | K | | |
| td2 | 2m Dew Point Temperature | degC | **units** (str) : Set to desired units. Default is *'degC'*. | |
||||||
| | | | | |
| | | | | |
||||||
| | | degF | | |
| | | K | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| tc | Temperature in Celsius | degC | | |
| | | degF | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| th/theta | Potential Temperature | K | **units** (str) : Set to desired units. Default is *'K'*. | |
| td | Dew Point Temperature | degC | **units** (str) : Set to desired units. Default is *'degC'*. | |
||||||
| | | | | |
| | | | | |
||||||
| | | degC | | |
| | | K | | |
||||||
| | | | | |
| | | | | |
||||||
| | | degF | | |
| | | degF | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| temp | Temperature (in specified units) | K | **units** (str) : Set to desired units. Default is *'K'*. | |
| tc | Temperature in Celsius | degC | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | degC | | |
| th/theta | Potential Temperature | K | **units** (str) : Set to desired units. Default is *'K'*. | |
||||||
| | | | | |
| | | | | |
||||||
| | | degF | | |
| | | degC | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| tk | Temperature in Kelvin | K | | |
| | | degF | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| times | Times in the File or Sequence | | | |
| temp | Temperature (in specified units) | K | **units** (str) : Set to desired units. Default is *'K'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| xtimes | XTIME Coordinate | minutes since | | |
| | | degC | | |
||||||
| | | | | |
| | | | | |
||||||
| | (if applicable) | start of | | |
| | | degF | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | model run | | |
| tk | Temperature in Kelvin | K | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| tv | Virtual Temperature | K | **units** (str) : Set to desired units. Default is *'K'*. | |
| times | Times in the File or Sequence | | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | degC | | |
| xtimes | XTIME Coordinate | minutes since | | |
||||||
| | | | | |
| | | | | |
||||||
| | | degF | | |
| | (if applicable) | start of | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| twb | Wet Bulb Temperature | K | **units** (str) : Set to desired units. Default is *'K'*. | |
| | | model run | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | degC | | |
| tv | Virtual Temperature | K | **units** (str) : Set to desired units. Default is *'K'*. | |
||||||
| | | | | |
| | | | | |
||||||
| | | degF | | |
| | | degC | | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| updraft_helicity | Updraft Helicity | m2 s-2 | **bottom** (float): The bottom level for the calculation in meters. Default is *2000.0*. | |
| | | degF | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | | **top** (float): The top level for the calculation in meters. Default is *5000.0*. | |
| twb | Wet Bulb Temperature | K | **units** (str) : Set to desired units. Default is *'K'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| ua | U-component of Wind on Mass Points | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
| | | degC | | |
||||||
| | | | | |
| | | | | |
||||||
| | | km h-1 | | |
| | | degF | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | mi h-1 | | |
| updraft_helicity | Updraft Helicity | m2 s-2 | **bottom** (float): The bottom level for the calculation in meters. Default is *2000.0*. | |
||||||
| | | | | |
| | | | | |
||||||
| | | kt | | |
| | | | **top** (float): The top level for the calculation in meters. Default is *5000.0*. | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | ft s-1 | | |
| ua | U-component of Wind on Mass Points | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| va | V-component of Wind on Mass Points | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
| | | km h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | km h-1 | | |
| | | mi h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | mi h-1 | | |
| | | kt | | |
||||||
| | | | | |
| | | | | |
||||||
| | | kt | | |
| | | ft s-1 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | ft s-1 | | |
| va | V-component of Wind on Mass Points | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| wa | W-component of Wind on Mass Points | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
| | | km h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | km h-1 | | |
| | | mi h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | mi h-1 | | |
| | | kt | | |
||||||
| | | | | |
| | | | | |
||||||
| | | kt | | |
| | | ft s-1 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | ft s-1 | | |
| wa | W-component of Wind on Mass Points | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| uvmet10 | 10 m U and V Components of Wind | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
| | | km h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | Rotated to Earth Coordinates | km h-1 | | |
| | | mi h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | mi h-1 | | |
| | | kt | | |
||||||
| | | | | |
| | | | | |
||||||
| | | kt | | |
| | | ft s-1 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | ft s-1 | | |
| uvmet10 | 10 m U and V Components of Wind | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| uvmet | U and V Components of Wind | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
| | Rotated to Earth Coordinates | km h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | Rotated to Earth Coordinates | km h-1 | | |
| | | mi h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | mi h-1 | | |
| | | kt | | |
||||||
| | | | | |
| | | | | |
||||||
| | | kt | | |
| | | ft s-1 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | ft s-1 | | |
| uvmet | U and V Components of Wind | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| wspd_wdir | Wind Speed and Direction (wind_from_direction) | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
| | Rotated to Earth Coordinates | km h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | in Grid Coordinates | km h-1 | | |
| | | mi h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | mi h-1 | | |
| | | kt | | |
||||||
| | | | | |
| | | | | |
||||||
| | | kt | | |
| | | ft s-1 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | ft s-1 | | |
| wspd_wdir | Wind Speed and Direction (wind_from_direction) | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| wspd_wdir10 | 10m Wind Speed and Direction (wind_from_direction) | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
| | in Grid Coordinates | km h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | in Grid Coordinates | km h-1 | | |
| | | mi h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | mi h-1 | | |
| | | kt | | |
||||||
| | | | | |
| | | | | |
||||||
| | | kt | | |
| | | ft s-1 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | ft s-1 | | |
| wspd_wdir10 | 10m Wind Speed and Direction (wind_from_direction) | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| uvmet_wspd_wdir | Wind Speed and Direction (wind_from_direction) | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
| | in Grid Coordinates | km h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | Rotated to Earth Coordinates | km h-1 | | |
| | | mi h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | mi h-1 | | |
| | | kt | | |
||||||
| | | | | |
| | | | | |
||||||
| | | kt | | |
| | | ft s-1 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | ft s-1 | | |
| uvmet_wspd_wdir | Wind Speed and Direction (wind_from_direction) | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| uvmet10_wspd_wdir | 10m Wind Speed and Direction (wind_from_direction) | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
| | Rotated to Earth Coordinates | km h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | Rotated to Earth Coordinates | km h-1 | | |
| | | mi h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | mi h-1 | | |
| | | kt | | |
||||||
| | | | | |
| | | | | |
||||||
| | | kt | | |
| | | ft s-1 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | ft s-1 | | |
| uvmet10_wspd_wdir | 10m Wind Speed and Direction (wind_from_direction) | m s-1 | **units** (str) : Set to desired units. Default is *'m s-1'*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
| z/height | Full Model Height on Mass Levels | m | **msl** (boolean): Set to False to return AGL values. True is for MSL. Default is *True*. | |
| | Rotated to Earth Coordinates | km h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | km | **units** (str) : Set to desired units. Default is *'m'*. | |
| | | mi h-1 | | |
||||||
| | | | | |
| | | | | |
||||||
| | | dm | | |
| | | kt | | |
||||||
| | | | | |
| | | | | |
||||||
| | | ft | | |
| | | ft s-1 | | |
||||||
| | | | | |
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
| | | mi | | |
| z/height | Model Height for Mass Grid | m | **msl** (boolean): Set to False to return AGL values. True is for MSL. Default is *True*. | |
||||||
+--------------------+---------------------------------------------------------------+-----------------------------+-----------------------------------------------------------------------------------------------+ |
| | | | | |
||||||
|
| | | km | **units** (str) : Set to desired units. Default is *'m'*. | |
||||||
|
| | | | | |
||||||
|
| | | dm | | |
||||||
|
| | | | | |
||||||
|
| | | ft | | |
||||||
|
| | | | | |
||||||
|
| | | mi | | |
||||||
|
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
|
| zstag | Model Height for Vertically Staggered Grid | m | **msl** (boolean): Set to False to return AGL values. True is for MSL. Default is *True*. | |
||||||
|
| | | | | |
||||||
|
| | | km | **units** (str) : Set to desired units. Default is *'m'*. | |
||||||
|
| | | | | |
||||||
|
| | | dm | | |
||||||
|
| | | | | |
||||||
|
| | | ft | | |
||||||
|
| | | | | |
||||||
|
| | | mi | | |
||||||
|
+--------------------+---------------------------------------------------------------+-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
||||||
|
|
||||||
|
@ -0,0 +1,26 @@ |
|||||||
|
.. _citation: |
||||||
|
|
||||||
|
Citation |
||||||
|
================= |
||||||
|
|
||||||
|
WRF-Python has a Digital Object Identifier (DOI), which is a persistent |
||||||
|
identifier for web-based resources. The wrf-python DOI, when used in URL form, |
||||||
|
https://doi.org/10.5065/D6W094P1, provides a persistent link to the wrf-python |
||||||
|
Github page. The benefit of DOIs is that they are widely accepted by academic |
||||||
|
publishers as citable locators for scholarly objects. |
||||||
|
|
||||||
|
If you author a paper that involves data analysis with wrf-python, or |
||||||
|
visualizations created with wrf-python, we would like to ask you to please |
||||||
|
cite wrf-python. This helps us better understand the impact of the software on |
||||||
|
the scientific community, which in turns helps us maintain support for the |
||||||
|
effort. |
||||||
|
|
||||||
|
You can cite wrf-python using the following citation: |
||||||
|
|
||||||
|
.. code-block:: none |
||||||
|
|
||||||
|
Ladwig, W. (2017). wrf-python (Version x.x.x) [Software]. Boulder, Colorado: UCAR/NCAR. https://doi.org/10.5065/D6W094P1 |
||||||
|
|
||||||
|
.. note:: |
||||||
|
|
||||||
|
The version number x.x.x should be set to the version of wrf-python that you are using. |
@ -0,0 +1,25 @@ |
|||||||
|
Tutorials |
||||||
|
============= |
||||||
|
|
||||||
|
NCAR occasionally provides tutorials for wrf-python at various times |
||||||
|
throughout the year. |
||||||
|
|
||||||
|
Below are the links to the upcoming and past tutorials. |
||||||
|
|
||||||
|
Upcoming Tutorials |
||||||
|
--------------------- |
||||||
|
|
||||||
|
.. toctree:: |
||||||
|
:maxdepth: 1 |
||||||
|
|
||||||
|
tutorials/tutorial_03_2018.rst |
||||||
|
|
||||||
|
|
||||||
|
Past Tutorials |
||||||
|
------------------ |
||||||
|
|
||||||
|
.. toctree:: |
||||||
|
:maxdepth: 1 |
||||||
|
|
||||||
|
tutorials/wrf_workshop_2017.rst |
||||||
|
|
@ -0,0 +1,77 @@ |
|||||||
|
WRF-Python Tutorial 2018 |
||||||
|
========================= |
||||||
|
|
||||||
|
NCAR will be providing a four hour tutorial for wrf-python on Wednesday, March |
||||||
|
7, 2018. The tutorial is free, but seating is limited to only 16 students, so |
||||||
|
registration is required. |
||||||
|
|
||||||
|
The tutorial will take place at NCAR's corporate training center in Boulder, |
||||||
|
Colorado. |
||||||
|
|
||||||
|
`Corporate Technical Training Center <https://www2.fin.ucar.edu/it/about-cttc>`_ |
||||||
|
3085 Center Green Drive, Building CG-2, Room #3024 |
||||||
|
Boulder, Colorado |
||||||
|
|
||||||
|
Overview |
||||||
|
-------------- |
||||||
|
|
||||||
|
This tutorial provides an introduction to wrf-python. The tutorial is beginner |
||||||
|
friendly for new users of wrf-python, but this is not an introduction to the Python |
||||||
|
programming language (see :ref:`prereq`). Due to limited seating, if you |
||||||
|
do not have any previous experience with Python, please do not register |
||||||
|
for this tutorial. |
||||||
|
|
||||||
|
Students are encouraged to bring their own data sets, but data will be provided |
||||||
|
if this is not an option. Students will be provided a jupyter notebook workbook |
||||||
|
which can be modified to accommodate their data. |
||||||
|
|
||||||
|
Topics include: |
||||||
|
|
||||||
|
- How to install wrf-python via conda |
||||||
|
- A brief introduction to jupyter notebook |
||||||
|
- Overview of WRF data files |
||||||
|
- WRF-Python basics |
||||||
|
- Plotting with cartopy |
||||||
|
- Overview of OpenMP features and other performance tips |
||||||
|
- Open lab for students |
||||||
|
|
||||||
|
|
||||||
|
Registration |
||||||
|
--------------- |
||||||
|
|
||||||
|
The registration form is here: |
||||||
|
|
||||||
|
`Registration Form <https://goo.gl/forms/is5VExf3w4bFGXUb2>`_ |
||||||
|
|
||||||
|
Registration consists of a brief survey, which will help give the instructors |
||||||
|
a brief overview of your background and will help tailor the tutorial to |
||||||
|
your expectations. |
||||||
|
|
||||||
|
.. _prereq: |
||||||
|
|
||||||
|
Prerequisites |
||||||
|
--------------- |
||||||
|
|
||||||
|
This tutorial assumes that you have basic knowledge of how to type commands |
||||||
|
in to a command terminal using your preferred operating system. You |
||||||
|
should know some basic directory commands like *cd*, *mkdir*, *cp*, *mv*. |
||||||
|
|
||||||
|
This tutorial assumes that you have prior experience programming in Python. |
||||||
|
Below is a list of some Python concepts that you will see in the examples, |
||||||
|
but don't worry if you aren't familiar with everything. |
||||||
|
|
||||||
|
- Opening a Python interpreter and entering commands. |
||||||
|
- Importing packages via the import statement. |
||||||
|
- Familiarity with some of the basic Python types: str, list, tuple, dict, bool, float, int, None. |
||||||
|
- Creating a list, tuple, or dict with "[ ]", "( )", "{ }" syntax (e.g. my_list = [1,2,3,4,5]). |
||||||
|
- Accessing dict/list/tuple items with the "x[ ]" syntax (e.g. my_list_item = my_list[0]). |
||||||
|
- Slicing str/list/tuple with the ":" syntax (e.g. my_slice = my_list[1:3]). |
||||||
|
- Using object methods and attributes with the "x.y" syntax (e.g. my_list.append(6)). |
||||||
|
- Calling functions (e.g. result = some_function(x, y)) |
||||||
|
- Familiarity with numpy would be helpful, as only a very brief introduction |
||||||
|
is provided. |
||||||
|
- Familiarity with matplotlib would be helpful, as only a very brief |
||||||
|
introduction is provided. |
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,465 @@ |
|||||||
|
|
||||||
|
MODULE omp_constants |
||||||
|
INTEGER, PARAMETER :: fomp_sched_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_lock_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_nest_lock_kind = 8 |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_static = 1 |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_dynamic = 2 |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_guided = 3 |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_auto = 4 |
||||||
|
END MODULE omp_constants |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_enabled() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL :: fomp_enabled |
||||||
|
|
||||||
|
fomp_enabled = .FALSE. |
||||||
|
|
||||||
|
END FUNCTION fomp_enabled |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_num_threads(num_threads) |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER, INTENT(IN) :: num_threads |
||||||
|
IF (.FALSE.) PRINT *, num_threads |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_num_threads |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_num_threads() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_num_threads |
||||||
|
|
||||||
|
fomp_get_num_threads = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_num_threads |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_max_threads() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_max_threads |
||||||
|
|
||||||
|
fomp_get_max_threads = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_max_threads |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_thread_num() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_thread_num |
||||||
|
|
||||||
|
fomp_get_thread_num = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_thread_num |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_num_procs() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_num_procs |
||||||
|
|
||||||
|
fomp_get_num_procs = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_num_procs |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_in_parallel() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL :: fomp_in_parallel |
||||||
|
|
||||||
|
fomp_in_parallel = .FALSE. |
||||||
|
|
||||||
|
END FUNCTION fomp_in_parallel |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_dynamic(dynamic_threads) |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL, INTENT(IN) :: dynamic_threads |
||||||
|
IF (.FALSE.) PRINT *, dynamic_threads |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_dynamic |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_dynamic() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL :: fomp_get_dynamic |
||||||
|
|
||||||
|
fomp_get_dynamic = .FALSE. |
||||||
|
|
||||||
|
END FUNCTION fomp_get_dynamic |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_nested(nested) |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL, INTENT(IN) :: nested |
||||||
|
IF (.FALSE.) PRINT *, nested |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_nested |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_nested() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL :: fomp_get_nested |
||||||
|
|
||||||
|
fomp_get_nested = .FALSE. |
||||||
|
|
||||||
|
END FUNCTION fomp_get_nested |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_schedule(kind, modifier) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_sched_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_sched_kind), INTENT(IN) :: kind |
||||||
|
INTEGER, INTENT(IN) :: modifier |
||||||
|
IF (.FALSE.) PRINT *, kind, modifier |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_schedule |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_get_schedule(kind, modifier) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_sched_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_sched_kind), INTENT(OUT) :: kind |
||||||
|
INTEGER, INTENT(OUT) :: modifier |
||||||
|
|
||||||
|
kind = -1 |
||||||
|
modifier = -1 |
||||||
|
|
||||||
|
END SUBROUTINE fomp_get_schedule |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_thread_limit() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_thread_limit |
||||||
|
|
||||||
|
fomp_get_thread_limit = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_thread_limit |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_max_active_levels(max_levels) |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER, INTENT(IN) :: max_levels |
||||||
|
IF (.FALSE.) PRINT *, max_levels |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_max_active_levels |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_max_active_levels() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_max_active_levels |
||||||
|
|
||||||
|
fomp_get_max_active_levels = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_max_active_levels |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_level() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_level |
||||||
|
|
||||||
|
fomp_get_level = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_level |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_ancestor_thread_num(level) |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER, INTENT(IN) :: level |
||||||
|
INTEGER :: fomp_get_ancestor_thread_num |
||||||
|
IF (.FALSE.) PRINT *, level |
||||||
|
|
||||||
|
fomp_get_ancestor_thread_num = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_ancestor_thread_num |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_team_size(level) |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER, INTENT(IN) :: level |
||||||
|
INTEGER :: fomp_get_team_size |
||||||
|
IF (.FALSE.) PRINT *, level |
||||||
|
|
||||||
|
fomp_get_team_size = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_team_size |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_active_level() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_active_level |
||||||
|
|
||||||
|
fomp_get_active_level = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_active_level |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_in_final() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL :: fomp_in_final |
||||||
|
|
||||||
|
fomp_in_final = .FALSE. |
||||||
|
|
||||||
|
END FUNCTION fomp_in_final |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_init_lock(svar) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_lock_kind), INTENT(OUT) :: svar |
||||||
|
|
||||||
|
svar = -1 |
||||||
|
|
||||||
|
END SUBROUTINE fomp_init_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_init_nest_lock(nvar) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_nest_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_nest_lock_kind), INTENT(OUT) :: nvar |
||||||
|
|
||||||
|
nvar = -1 |
||||||
|
|
||||||
|
END SUBROUTINE fomp_init_nest_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_destroy_lock(svar) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_lock_kind), INTENT(INOUT) :: svar |
||||||
|
IF (.FALSE.) PRINT *, svar |
||||||
|
|
||||||
|
END SUBROUTINE fomp_destroy_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_destroy_nest_lock(nvar) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_nest_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_nest_lock_kind), INTENT(INOUT) :: nvar |
||||||
|
IF (.FALSE.) PRINT *, nvar |
||||||
|
|
||||||
|
END SUBROUTINE fomp_destroy_nest_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_lock(svar) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_lock_kind), INTENT(INOUT) :: svar |
||||||
|
IF (.FALSE.) PRINT *, svar |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_nest_lock(nvar) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_nest_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_nest_lock_kind), INTENT(INOUT) :: nvar |
||||||
|
IF (.FALSE.) PRINT *, nvar |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_nest_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_unset_lock(svar) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_lock_kind), INTENT(INOUT) :: svar |
||||||
|
IF (.FALSE.) PRINT *, svar |
||||||
|
|
||||||
|
END SUBROUTINE fomp_unset_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_unset_nest_lock(nvar) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_nest_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_nest_lock_kind), INTENT(INOUT) :: nvar |
||||||
|
IF (.FALSE.) PRINT *, nvar |
||||||
|
|
||||||
|
END SUBROUTINE fomp_unset_nest_lock |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_test_lock(svar) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_lock_kind), INTENT(INOUT) :: svar |
||||||
|
LOGICAL :: fomp_test_lock |
||||||
|
IF (.FALSE.) PRINT *, svar |
||||||
|
|
||||||
|
fomp_test_lock = .FALSE. |
||||||
|
|
||||||
|
END FUNCTION fomp_test_lock |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_test_nest_lock(nvar) |
||||||
|
|
||||||
|
USE omp_constants, ONLY : fomp_nest_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_nest_lock_kind), INTENT(INOUT) :: nvar |
||||||
|
INTEGER :: fomp_test_nest_lock |
||||||
|
IF (.FALSE.) PRINT *, nvar |
||||||
|
|
||||||
|
fomp_test_nest_lock = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_test_nest_lock |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_wtime() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
REAL (KIND=8) :: fomp_get_wtime |
||||||
|
|
||||||
|
fomp_get_wtime = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_wtime |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_wtick() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
REAL (KIND=8) :: fomp_get_wtick |
||||||
|
|
||||||
|
fomp_get_wtick = -1 |
||||||
|
|
||||||
|
END FUNCTION fomp_get_wtick |
||||||
|
|
||||||
|
|
@ -0,0 +1,753 @@ |
|||||||
|
MODULE omp_constants |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
! f2py can't figure this out without me making a map of these kinds to |
||||||
|
! c types, so we're going to have to hard code the kinds below. |
||||||
|
!INTEGER, PARAMETER :: fomp_sched_kind = omp_sched_kind |
||||||
|
!INTEGER, PARAMETER :: fomp_nest_lock_kind = omp_nest_lock_kind |
||||||
|
!INTEGER, PARAMETER :: fomp_lock_kind = omp_lock_kind |
||||||
|
|
||||||
|
! Note: Defining these specifically is the only way I can get f2py to |
||||||
|
! work without doing the same thing in a mapping file. The values below |
||||||
|
! are for GNU on 64bit. This may not be entirely correct for non-GNU |
||||||
|
! compilers. In particular, it will be the locks that segfault/crash if |
||||||
|
! this is wrong. |
||||||
|
#if defined(__GFORTRAN__) |
||||||
|
#if (__SIZEOF_POINTER__ == 8) |
||||||
|
INTEGER, PARAMETER :: fomp_sched_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_lock_kind = 8 |
||||||
|
INTEGER, PARAMETER :: fomp_nest_lock_kind = 8 |
||||||
|
#else |
||||||
|
INTEGER, PARAMETER :: fomp_sched_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_lock_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_nest_lock_kind = 4 |
||||||
|
#endif |
||||||
|
#elif defined(__INTEL_COMPILER_BUILD_DATE) |
||||||
|
#if defined(__x86_64__) || defined(_M_X64) |
||||||
|
INTEGER, PARAMETER :: fomp_sched_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_lock_kind = 8 |
||||||
|
INTEGER, PARAMETER :: fomp_nest_lock_kind = 8 |
||||||
|
#else |
||||||
|
INTEGER, PARAMETER :: fomp_sched_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_lock_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_nest_lock_kind = 4 |
||||||
|
#endif |
||||||
|
#elif defined(__PGI) |
||||||
|
#if defined(__x86_64__) |
||||||
|
INTEGER, PARAMETER :: fomp_sched_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_lock_kind = 8 |
||||||
|
INTEGER, PARAMETER :: fomp_nest_lock_kind = 8 |
||||||
|
#else |
||||||
|
INTEGER, PARAMETER :: fomp_sched_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_lock_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_nest_lock_kind = 4 |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_static = omp_sched_static |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_dynamic = omp_sched_dynamic |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_guided = omp_sched_guided |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_auto = omp_sched_auto |
||||||
|
#else |
||||||
|
INTEGER, PARAMETER :: fomp_sched_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_lock_kind = 4 |
||||||
|
INTEGER, PARAMETER :: fomp_nest_lock_kind = 8 |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_static = 1 |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_dynamic = 2 |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_guided = 3 |
||||||
|
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_auto = 4 |
||||||
|
#endif |
||||||
|
|
||||||
|
END MODULE omp_constants |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_enabled() |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL :: fomp_enabled |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_enabled = .TRUE. |
||||||
|
#else |
||||||
|
fomp_enabled = .FALSE. |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_enabled |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_num_threads(num_threads) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER, INTENT(IN) :: num_threads |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_set_num_threads(num_threads) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, num_threads |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_num_threads |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_num_threads() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_num_threads |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_num_threads = omp_get_num_threads() |
||||||
|
#else |
||||||
|
fomp_get_num_threads = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_num_threads |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_max_threads() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_max_threads |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_max_threads = omp_get_max_threads() |
||||||
|
#else |
||||||
|
fomp_get_max_threads = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_max_threads |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_thread_num() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_thread_num |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_thread_num = omp_get_thread_num() |
||||||
|
#else |
||||||
|
fomp_get_thread_num = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_thread_num |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_num_procs() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_num_procs |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_num_procs = omp_get_num_procs() |
||||||
|
#else |
||||||
|
fomp_get_num_procs = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_num_procs |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_in_parallel() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL :: fomp_in_parallel |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_in_parallel = omp_in_parallel() |
||||||
|
#else |
||||||
|
fomp_in_parallel = .FALSE. |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_in_parallel |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_dynamic(dynamic_threads) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL, INTENT(IN) :: dynamic_threads |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_set_dynamic(dynamic_threads) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, dynamic_threads |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_dynamic |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_dynamic() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL :: fomp_get_dynamic |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_dynamic = omp_get_dynamic() |
||||||
|
#else |
||||||
|
fomp_get_dynamic = .FALSE. |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_dynamic |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_nested(nested) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL, INTENT(IN) :: nested |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_set_nested(nested) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, nested |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_nested |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_nested() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL :: fomp_get_nested |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_nested = omp_get_nested() |
||||||
|
#else |
||||||
|
fomp_get_nested = .FALSE. |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_nested |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_schedule(kind, modifier) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_sched_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_sched_kind), INTENT(IN) :: kind |
||||||
|
INTEGER, INTENT(IN) :: modifier |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_set_schedule(kind, modifier) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, kind, modifier |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_schedule |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_get_schedule(kind, modifier) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_sched_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_sched_kind), INTENT(OUT) :: kind |
||||||
|
INTEGER, INTENT(OUT) :: modifier |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_get_schedule(kind, modifier) |
||||||
|
#else |
||||||
|
kind = -1 |
||||||
|
modifier = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_get_schedule |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_thread_limit() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_thread_limit |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_thread_limit = omp_get_thread_limit() |
||||||
|
#else |
||||||
|
fomp_get_thread_limit = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_thread_limit |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_max_active_levels(max_levels) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER, INTENT(IN) :: max_levels |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_set_max_active_levels(max_levels) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, max_levels |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_max_active_levels |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_max_active_levels() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_max_active_levels |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_max_active_levels = omp_get_max_active_levels() |
||||||
|
#else |
||||||
|
fomp_get_max_active_levels = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_max_active_levels |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_level() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_level |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_level = omp_get_level() |
||||||
|
#else |
||||||
|
fomp_get_level = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_level |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_ancestor_thread_num(level) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER, INTENT(IN) :: level |
||||||
|
INTEGER :: fomp_get_ancestor_thread_num |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_ancestor_thread_num = omp_get_ancestor_thread_num(level) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, level |
||||||
|
fomp_get_ancestor_thread_num = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_ancestor_thread_num |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_team_size(level) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER, INTENT(IN) :: level |
||||||
|
INTEGER :: fomp_get_team_size |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_team_size = omp_get_team_size(level) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, level |
||||||
|
fomp_get_team_size = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_team_size |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_active_level() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER :: fomp_get_active_level |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_active_level = omp_get_active_level() |
||||||
|
#else |
||||||
|
fomp_get_active_level = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_get_active_level |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_in_final() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
LOGICAL :: fomp_in_final |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_in_final = omp_in_final() |
||||||
|
#else |
||||||
|
fomp_in_final = .FALSE. |
||||||
|
#endif |
||||||
|
|
||||||
|
END FUNCTION fomp_in_final |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_init_lock(svar) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_lock_kind), INTENT(OUT) :: svar |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_init_lock(svar) |
||||||
|
#else |
||||||
|
svar = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_init_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_init_nest_lock(nvar) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_nest_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_nest_lock_kind), INTENT(OUT) :: nvar |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_init_nest_lock(nvar) |
||||||
|
#else |
||||||
|
nvar = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_init_nest_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_destroy_lock(svar) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_lock_kind), INTENT(INOUT) :: svar |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_destroy_lock(svar) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, svar |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
END SUBROUTINE fomp_destroy_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_destroy_nest_lock(nvar) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_nest_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_nest_lock_kind), INTENT(INOUT) :: nvar |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_destroy_nest_lock(nvar) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, nvar |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_destroy_nest_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_lock(svar) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_lock_kind), INTENT(INOUT) :: svar |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_set_lock(svar) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, svar |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_set_nest_lock(nvar) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_nest_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_nest_lock_kind), INTENT(INOUT) :: nvar |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_set_nest_lock(nvar) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, nvar |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_set_nest_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_unset_lock(svar) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_lock_kind), INTENT(INOUT) :: svar |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_unset_lock(svar) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, svar |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_unset_lock |
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE fomp_unset_nest_lock(nvar) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_nest_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_nest_lock_kind), INTENT(INOUT) :: nvar |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
CALL omp_unset_nest_lock(nvar) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, nvar |
||||||
|
#endif |
||||||
|
|
||||||
|
END SUBROUTINE fomp_unset_nest_lock |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_test_lock(svar) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_lock_kind), INTENT(INOUT) :: svar |
||||||
|
LOGICAL :: fomp_test_lock |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_test_lock = omp_test_lock(svar) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, svar |
||||||
|
fomp_test_lock = .FALSE. |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END FUNCTION fomp_test_lock |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_test_nest_lock(nvar) |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
USE omp_constants, ONLY : fomp_nest_lock_kind |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
INTEGER(KIND=fomp_nest_lock_kind), INTENT(INOUT) :: nvar |
||||||
|
INTEGER :: fomp_test_nest_lock |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_test_nest_lock = omp_test_nest_lock(nvar) |
||||||
|
#else |
||||||
|
IF (.FALSE.) PRINT *, nvar |
||||||
|
fomp_test_nest_lock = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END FUNCTION fomp_test_nest_lock |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_wtime() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
REAL (KIND=8) :: fomp_get_wtime |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_wtime = omp_get_wtime() |
||||||
|
#else |
||||||
|
fomp_get_wtime = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END FUNCTION fomp_get_wtime |
||||||
|
|
||||||
|
|
||||||
|
FUNCTION fomp_get_wtick() |
||||||
|
#ifdef _OPENMP |
||||||
|
USE omp_lib |
||||||
|
#endif |
||||||
|
|
||||||
|
IMPLICIT NONE |
||||||
|
|
||||||
|
!f2py threadsafe |
||||||
|
|
||||||
|
REAL (KIND=8) :: fomp_get_wtick |
||||||
|
|
||||||
|
#ifdef _OPENMP |
||||||
|
fomp_get_wtick = omp_get_wtick() |
||||||
|
#else |
||||||
|
fomp_get_wtick = -1 |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END FUNCTION fomp_get_wtick |
||||||
|
|
||||||
|
|
@ -1,88 +0,0 @@ |
|||||||
from __future__ import (absolute_import, division, print_function, |
|
||||||
unicode_literals) |
|
||||||
|
|
||||||
from .constants import Constants |
|
||||||
from .extension import _tk, _rh, _cloudfrac |
|
||||||
from .metadecorators import set_cloudfrac_metadata |
|
||||||
from .util import extract_vars |
|
||||||
|
|
||||||
@set_cloudfrac_metadata() |
|
||||||
def get_cloudfrac(wrfin, timeidx=0, method="cat", squeeze=True, |
|
||||||
cache=None, meta=True, _key=None): |
|
||||||
"""Return the cloud fraction. |
|
||||||
|
|
||||||
The leftmost dimension of the returned array represents three different |
|
||||||
quantities: |
|
||||||
|
|
||||||
- return_val[0,...] will contain LOW level cloud fraction |
|
||||||
- return_val[1,...] will contain MID level cloud fraction |
|
||||||
- return_val[2,...] will contain HIGH level cloud fraction |
|
||||||
|
|
||||||
This functions extracts the necessary variables from the NetCDF file |
|
||||||
object in order to perform the calculation. |
|
||||||
|
|
||||||
Args: |
|
||||||
|
|
||||||
wrfin (:class:`netCDF4.Dataset`, :class:`Nio.NioFile`, or an \ |
|
||||||
iterable): WRF-ARW NetCDF |
|
||||||
data as a :class:`netCDF4.Dataset`, :class:`Nio.NioFile` |
|
||||||
or an iterable sequence of the aforementioned types. |
|
||||||
|
|
||||||
timeidx (:obj:`int` or :data:`wrf.ALL_TIMES`, optional): The |
|
||||||
desired time index. This value can be a positive integer, |
|
||||||
negative integer, or |
|
||||||
:data:`wrf.ALL_TIMES` (an alias for None) to return |
|
||||||
all times in the file or sequence. The default is 0. |
|
||||||
|
|
||||||
method (:obj:`str`, optional): The aggregation method to use for |
|
||||||
sequences. Must be either 'cat' or 'join'. |
|
||||||
'cat' combines the data along the Time dimension. |
|
||||||
'join' creates a new dimension for the file index. |
|
||||||
The default is 'cat'. |
|
||||||
|
|
||||||
squeeze (:obj:`bool`, optional): Set to False to prevent dimensions |
|
||||||
with a size of 1 from being automatically removed from the shape |
|
||||||
of the output. Default is True. |
|
||||||
|
|
||||||
cache (:obj:`dict`, optional): A dictionary of (varname, ndarray) |
|
||||||
that can be used to supply pre-extracted NetCDF variables to the |
|
||||||
computational routines. It is primarily used for internal |
|
||||||
purposes, but can also be used to improve performance by |
|
||||||
eliminating the need to repeatedly extract the same variables |
|
||||||
used in multiple diagnostics calculations, particularly when using |
|
||||||
large sequences of files. |
|
||||||
Default is None. |
|
||||||
|
|
||||||
meta (:obj:`bool`, optional): Set to False to disable metadata and |
|
||||||
return :class:`numpy.ndarray` instead of |
|
||||||
:class:`xarray.DataArray`. Default is True. |
|
||||||
|
|
||||||
_key (:obj:`int`, optional): A caching key. This is used for internal |
|
||||||
purposes only. Default is None. |
|
||||||
|
|
||||||
Returns: |
|
||||||
:class:`xarray.DataArray` or :class:`numpy.ndarray`: The |
|
||||||
cloud fraction array whose leftmost dimension is 3 (LOW=0, MID=1, |
|
||||||
HIGH=2). |
|
||||||
If xarray is enabled and the *meta* parameter is True, then the result |
|
||||||
will be a :class:`xarray.DataArray` object. Otherwise, the result will |
|
||||||
be a :class:`numpy.ndarray` object with no metadata. |
|
||||||
|
|
||||||
""" |
|
||||||
|
|
||||||
ncvars = extract_vars(wrfin, timeidx, ("P", "PB", "QVAPOR", "T"), |
|
||||||
method, squeeze, cache, meta=False, |
|
||||||
_key=_key) |
|
||||||
|
|
||||||
p = ncvars["P"] |
|
||||||
pb = ncvars["PB"] |
|
||||||
qv = ncvars["QVAPOR"] |
|
||||||
t = ncvars["T"] |
|
||||||
|
|
||||||
full_p = p + pb |
|
||||||
full_t = t + Constants.T_BASE |
|
||||||
|
|
||||||
tk = _tk(full_p, full_t) |
|
||||||
rh = _rh(qv, full_p, tk) |
|
||||||
|
|
||||||
return _cloudfrac(full_p, rh) |
|
@ -0,0 +1,164 @@ |
|||||||
|
from __future__ import (absolute_import, division, print_function, |
||||||
|
unicode_literals) |
||||||
|
|
||||||
|
import numpy as np |
||||||
|
import numpy.ma as ma |
||||||
|
|
||||||
|
from .constants import Constants, default_fill |
||||||
|
from .extension import _tk, _rh, _cloudfrac |
||||||
|
from .metadecorators import set_cloudfrac_metadata |
||||||
|
from .util import extract_vars |
||||||
|
from .g_geoht import _get_geoht |
||||||
|
|
||||||
|
|
||||||
|
@set_cloudfrac_metadata() |
||||||
|
def get_cloudfrac(wrfin, timeidx=0, method="cat", squeeze=True, |
||||||
|
cache=None, meta=True, _key=None, |
||||||
|
vert_type="height_agl", low_thresh=None, mid_thresh=None, |
||||||
|
high_thresh=None, missing=default_fill(np.float64)): |
||||||
|
"""Return the cloud fraction for low, mid, and high level clouds. |
||||||
|
|
||||||
|
The leftmost dimension of the returned array represents three different |
||||||
|
quantities: |
||||||
|
|
||||||
|
- return_val[0,...] will contain LOW level cloud fraction |
||||||
|
- return_val[1,...] will contain MID level cloud fraction |
||||||
|
- return_val[2,...] will contain HIGH level cloud fraction |
||||||
|
|
||||||
|
If the vertical coordinate type is 'height_agl' or 'height_msl', the |
||||||
|
default cloud levels are defined as: |
||||||
|
|
||||||
|
300 m <= low_cloud < 2000 m |
||||||
|
2000 m <= mid_cloud < 6000 m |
||||||
|
6000 m <= high_cloud |
||||||
|
|
||||||
|
For 'pressure', the default cloud levels are defined as: |
||||||
|
|
||||||
|
97000 Pa <= low_cloud < 80000 Pa |
||||||
|
80000 Pa <= mid_cloud < 45000 Pa |
||||||
|
45000 Pa <= high_cloud |
||||||
|
|
||||||
|
Note that the default low cloud levels are chosen to |
||||||
|
exclude clouds near the surface (fog). If you want fog included, set |
||||||
|
*low_thresh* to ~99500 Pa if *vert_type* is set to 'pressure', or 15 m if |
||||||
|
using 'height_msl' or 'height_agl'. Keep in mind that the lowest mass grid |
||||||
|
points are slightly above the ground, and in order to find clouds, the |
||||||
|
*low_thresh* needs to be set to values that are slightly greater than |
||||||
|
(less than) the lowest height (pressure) values. |
||||||
|
|
||||||
|
When using 'pressure' or 'height_agl' for *vert_type*, there is a |
||||||
|
possibility that the lowest WRF level will be higher than the low_cloud or |
||||||
|
mid_cloud threshold, particularly for mountainous regions. When this |
||||||
|
happens, a fill value will be used in the output. |
||||||
|
|
||||||
|
This functions extracts the necessary variables from the NetCDF file |
||||||
|
object in order to perform the calculation. |
||||||
|
|
||||||
|
Args: |
||||||
|
|
||||||
|
wrfin (:class:`netCDF4.Dataset`, :class:`Nio.NioFile`, or an \ |
||||||
|
iterable): WRF-ARW NetCDF |
||||||
|
data as a :class:`netCDF4.Dataset`, :class:`Nio.NioFile` |
||||||
|
or an iterable sequence of the aforementioned types. |
||||||
|
|
||||||
|
timeidx (:obj:`int` or :data:`wrf.ALL_TIMES`, optional): The |
||||||
|
desired time index. This value can be a positive integer, |
||||||
|
negative integer, or |
||||||
|
:data:`wrf.ALL_TIMES` (an alias for None) to return |
||||||
|
all times in the file or sequence. The default is 0. |
||||||
|
|
||||||
|
method (:obj:`str`, optional): The aggregation method to use for |
||||||
|
sequences. Must be either 'cat' or 'join'. |
||||||
|
'cat' combines the data along the Time dimension. |
||||||
|
'join' creates a new dimension for the file index. |
||||||
|
The default is 'cat'. |
||||||
|
|
||||||
|
squeeze (:obj:`bool`, optional): Set to False to prevent dimensions |
||||||
|
with a size of 1 from being automatically removed from the shape |
||||||
|
of the output. Default is True. |
||||||
|
|
||||||
|
cache (:obj:`dict`, optional): A dictionary of (varname, ndarray) |
||||||
|
that can be used to supply pre-extracted NetCDF variables to the |
||||||
|
computational routines. It is primarily used for internal |
||||||
|
purposes, but can also be used to improve performance by |
||||||
|
eliminating the need to repeatedly extract the same variables |
||||||
|
used in multiple diagnostics calculations, particularly when using |
||||||
|
large sequences of files. |
||||||
|
Default is None. |
||||||
|
|
||||||
|
meta (:obj:`bool`, optional): Set to False to disable metadata and |
||||||
|
return :class:`numpy.ndarray` instead of |
||||||
|
:class:`xarray.DataArray`. Default is True. |
||||||
|
|
||||||
|
_key (:obj:`int`, optional): A caching key. This is used for internal |
||||||
|
purposes only. Default is None. |
||||||
|
|
||||||
|
vert_type (:obj:`str`, optional): The type of vertical coordinate used |
||||||
|
to determine cloud type thresholds. Must be 'height_agl', |
||||||
|
'height_msl', or 'pres'. The default is 'height_agl'. |
||||||
|
|
||||||
|
low_thresh (:obj:`float`, optional): The lower bound for what is |
||||||
|
considered a low cloud. If *vert_type* is 'pres', the default is |
||||||
|
97000 Pa. If *vert_type* is 'height_agl' or 'height_msl', then the |
||||||
|
default is 300 m. |
||||||
|
|
||||||
|
mid_thresh (:obj:`float`, optional): The lower bound for what is |
||||||
|
considered a mid level cloud. If *vert_type* is 'pres', the |
||||||
|
default is 80000 Pa. If *vert_type* is 'height_agl' or |
||||||
|
'height_msl', then the default is 2000 m. |
||||||
|
|
||||||
|
high_thresh (:obj:`float`, optional): The lower bound for what is |
||||||
|
considered a high level cloud. If *vert_type* is 'pres', the |
||||||
|
default is 45000 Pa. If *vert_type* is 'height_agl' or |
||||||
|
'height_msl', then the default is 6000 m. |
||||||
|
|
||||||
|
Returns: |
||||||
|
:class:`xarray.DataArray` or :class:`numpy.ndarray`: The |
||||||
|
cloud fraction array whose leftmost dimension is 3 (LOW=0, MID=1, |
||||||
|
HIGH=2). |
||||||
|
If xarray is enabled and the *meta* parameter is True, then the result |
||||||
|
will be a :class:`xarray.DataArray` object. Otherwise, the result will |
||||||
|
be a :class:`numpy.ndarray` object with no metadata. |
||||||
|
|
||||||
|
""" |
||||||
|
|
||||||
|
ncvars = extract_vars(wrfin, timeidx, ("P", "PB", "QVAPOR", "T"), |
||||||
|
method, squeeze, cache, meta=False, |
||||||
|
_key=_key) |
||||||
|
|
||||||
|
p = ncvars["P"] |
||||||
|
pb = ncvars["PB"] |
||||||
|
qv = ncvars["QVAPOR"] |
||||||
|
t = ncvars["T"] |
||||||
|
|
||||||
|
full_p = p + pb |
||||||
|
full_t = t + Constants.T_BASE |
||||||
|
|
||||||
|
tk = _tk(full_p, full_t) |
||||||
|
rh = _rh(qv, full_p, tk) |
||||||
|
|
||||||
|
if vert_type.lower() == "pres" or vert_type.lower() == "pressure": |
||||||
|
v_coord = full_p |
||||||
|
_low_thresh = 97000. if low_thresh is None else low_thresh |
||||||
|
_mid_thresh = 80000. if mid_thresh is None else mid_thresh |
||||||
|
_high_thresh = 45000. if high_thresh is None else high_thresh |
||||||
|
vert_inc_w_height = 0 |
||||||
|
elif (vert_type.lower() == "height_msl" |
||||||
|
or vert_type.lower() == "height_agl"): |
||||||
|
is_msl = vert_type.lower() == "height_msl" |
||||||
|
v_coord = _get_geoht(wrfin, timeidx, method, squeeze, |
||||||
|
cache, meta=False, _key=_key, height=True, |
||||||
|
msl=is_msl) |
||||||
|
_low_thresh = 300. if low_thresh is None else low_thresh |
||||||
|
_mid_thresh = 2000. if mid_thresh is None else mid_thresh |
||||||
|
_high_thresh = 6000. if high_thresh is None else high_thresh |
||||||
|
vert_inc_w_height = 1 |
||||||
|
else: |
||||||
|
raise ValueError("'vert_type' must be 'pres', 'height_msl', " |
||||||
|
"or 'height_agl'") |
||||||
|
|
||||||
|
cfrac = _cloudfrac(v_coord, rh, vert_inc_w_height, |
||||||
|
_low_thresh, _mid_thresh, _high_thresh, missing) |
||||||
|
|
||||||
|
return ma.masked_values(cfrac, missing) |
||||||
|
|
@ -0,0 +1,17 @@ |
|||||||
|
from __future__ import (absolute_import, division, print_function, unicode_literals) |
||||||
|
|
||||||
|
from wrf import getvar |
||||||
|
from netCDF4 import Dataset as nc |
||||||
|
#ncfile = nc("/Users/ladwig/Documents/wrf_files/wrfout_d01_2016-02-25_18_00_00") |
||||||
|
ncfile = nc("/Users/ladwig/Documents/wrf_files/wrfout_d01_2016-10-07_00_00_00") |
||||||
|
|
||||||
|
def gen_seq(): |
||||||
|
wrfseq = [ncfile, ncfile, ncfile] |
||||||
|
for wrf in wrfseq: |
||||||
|
yield wrf |
||||||
|
|
||||||
|
p_gen = getvar(gen_seq(), "P", method="join") |
||||||
|
|
||||||
|
print(p_gen) |
||||||
|
del p_gen |
||||||
|
|
@ -1,6 +1,18 @@ |
|||||||
|
; Bug1: This segfaults |
||||||
l = NewList("fifo") |
l = NewList("fifo") |
||||||
name = "foo" |
name = "foo" |
||||||
ListAppend(l, (/name/)) |
ListAppend(l, (/name/)) |
||||||
print(l) |
print(l) |
||||||
print(l[0]) |
print(l[0]) |
||||||
name = "bar" |
name = "bar" |
||||||
|
|
||||||
|
; Bug2 Variables disappear |
||||||
|
a = addfile("/Users/ladwig/Documents/wrf_files/wrfout_d02_2010-06-13_21:00:00.nc", "r") |
||||||
|
b := wrf_user_getvar(a, "slp", -1) |
||||||
|
c = NewList("fifo") |
||||||
|
ListAppend(c, (/b/)) |
||||||
|
b := wrf_user_getvar(a, "rh", -1) |
||||||
|
ListAppend(c, (/b/)) |
||||||
|
|
||||||
|
print(c[0]) |
||||||
|
print(c[1]) ; Variables start disappearing |
||||||
|
@ -0,0 +1,44 @@ |
|||||||
|
import sys |
||||||
|
import os |
||||||
|
|
||||||
|
try: |
||||||
|
from unittest.mock import MagicMock |
||||||
|
except ImportError: |
||||||
|
from mock import Mock as MagicMock |
||||||
|
|
||||||
|
class Mock(MagicMock): |
||||||
|
@classmethod |
||||||
|
def __getattr__(cls, name): |
||||||
|
return Mock() |
||||||
|
|
||||||
|
MOCK_MODULES = ["numpy", "numpy.ma", "xarray", "cartopy", |
||||||
|
"pandas", "matplotlib", "netCDF4", "mpl_toolkits.basemap", |
||||||
|
"wrf._wrffortran"] |
||||||
|
sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) |
||||||
|
|
||||||
|
consts = {"DEFAULT_FILL" : 9.9692099683868690E36, |
||||||
|
"DEFAULT_FILL_INT8" : -127, |
||||||
|
"DEFAULT_FILL_INT16" : -32767, |
||||||
|
"DEFAULT_FILL_INT32" : -2147483647, |
||||||
|
"DEFAULT_FILL_INT64" : -9223372036854775806, |
||||||
|
"DEFAULT_FILL_FLOAT" : 9.9692099683868690E36, |
||||||
|
"DEFAULT_FILL_DOUBLE" : 9.9692099683868690E36, |
||||||
|
"fomp_sched_static" : 1, |
||||||
|
"fomp_sched_dynamic" : 2, |
||||||
|
"fomp_sched_guided" : 3, |
||||||
|
"fomp_sched_auto" : 4} |
||||||
|
|
||||||
|
class MockWrfConstants(object): |
||||||
|
def __init__(self): |
||||||
|
self.__dict__ = consts |
||||||
|
|
||||||
|
def mock_asscalar(val): |
||||||
|
return float(val) |
||||||
|
|
||||||
|
sys.modules["wrf._wrffortran"].wrf_constants = MockWrfConstants() |
||||||
|
sys.modules["wrf._wrffortran"].omp_constants = MockWrfConstants() |
||||||
|
|
||||||
|
sys.modules["numpy"].asscalar = mock_asscalar |
||||||
|
|
||||||
|
import wrf |
||||||
|
print (wrf.get_coord_pairs.__doc__) |
@ -0,0 +1,77 @@ |
|||||||
|
import unittest as ut |
||||||
|
import numpy.testing as nt |
||||||
|
import numpy as np |
||||||
|
import numpy.ma as ma |
||||||
|
import os, sys |
||||||
|
import subprocess |
||||||
|
|
||||||
|
from wrf import getvar, ALL_TIMES |
||||||
|
|
||||||
|
TEST_DIR = "/Users/ladwig/Documents/wrf_files/wrf_vortex_multi" |
||||||
|
TEST_FILENAMES = ["wrfout_d02_2005-08-28_00:00:00", |
||||||
|
"wrfout_d02_2005-08-28_12:00:00", |
||||||
|
"wrfout_d02_2005-08-29_00:00:00"] |
||||||
|
TEST_FILES = [os.path.join(TEST_DIR, x) for x in TEST_FILENAMES] |
||||||
|
|
||||||
|
# Python 3 |
||||||
|
if sys.version_info > (3,): |
||||||
|
xrange = range |
||||||
|
|
||||||
|
|
||||||
|
class WRFFileVarsTest(ut.TestCase): |
||||||
|
longMessage = True |
||||||
|
|
||||||
|
def make_test(ncfiles, varname): |
||||||
|
def test(self): |
||||||
|
#import time |
||||||
|
#very_start = time.time() |
||||||
|
#start = time.time() |
||||||
|
t1 = getvar(ncfiles, varname, 0) |
||||||
|
|
||||||
|
#end = time.time() |
||||||
|
#print ("t1: ", start-end) |
||||||
|
#start = time.time() |
||||||
|
t2 = getvar(ncfiles, varname, 0, meta=False) |
||||||
|
#end = time.time() |
||||||
|
#print ("t2: ", start-end) |
||||||
|
#start = time.time() |
||||||
|
t3 = getvar(ncfiles, varname, ALL_TIMES) |
||||||
|
#end = time.time() |
||||||
|
#print ("t3: ", start-end) |
||||||
|
#start = time.time() |
||||||
|
t4 = getvar(ncfiles, varname, ALL_TIMES, meta=False) |
||||||
|
#end = time.time() |
||||||
|
#print ("t4: ", start-end) |
||||||
|
#start = time.time() |
||||||
|
t5 = getvar(ncfiles, varname, ALL_TIMES, method="join") |
||||||
|
#end = time.time() |
||||||
|
#print ("t5: ", start-end) |
||||||
|
#start = time.time() |
||||||
|
t6 = getvar(ncfiles, varname, ALL_TIMES, method="join", meta=False) |
||||||
|
#end = time.time() |
||||||
|
#print ("t6: ", start-end) |
||||||
|
#start = time.time() |
||||||
|
|
||||||
|
#print ("Total Time: ", (end-start)) |
||||||
|
return test |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
from netCDF4 import Dataset |
||||||
|
ncfiles = [Dataset(x) for x in TEST_FILES] |
||||||
|
|
||||||
|
#import scipy.io |
||||||
|
#ncfiles = [scipy.io.netcdf.netcdf_file(x) for x in TEST_FILES] |
||||||
|
|
||||||
|
file_vars = ncfiles[0].variables.keys() |
||||||
|
|
||||||
|
ignore_vars = [] |
||||||
|
|
||||||
|
for var in file_vars: |
||||||
|
if var in ignore_vars: |
||||||
|
continue |
||||||
|
|
||||||
|
test_func1 = make_test(ncfiles, var) |
||||||
|
setattr(WRFFileVarsTest, 'test_{0}'.format(var), test_func1) |
||||||
|
|
||||||
|
ut.main() |
@ -0,0 +1,121 @@ |
|||||||
|
from __future__ import (absolute_import, division, print_function, |
||||||
|
unicode_literals) |
||||||
|
|
||||||
|
import unittest as ut |
||||||
|
import numpy.testing as nt |
||||||
|
|
||||||
|
from wrf import (omp_set_num_threads, omp_get_num_threads, |
||||||
|
omp_get_max_threads, omp_get_thread_num, |
||||||
|
omp_get_num_procs, omp_in_parallel, |
||||||
|
omp_set_dynamic, omp_get_dynamic, omp_set_nested, |
||||||
|
omp_get_nested, omp_set_schedule, |
||||||
|
omp_get_schedule, omp_get_thread_limit, |
||||||
|
omp_set_max_active_levels, |
||||||
|
omp_get_max_active_levels, omp_get_level, |
||||||
|
omp_get_ancestor_thread_num, omp_get_team_size, |
||||||
|
omp_get_active_level, omp_in_final, |
||||||
|
omp_init_lock, omp_init_nest_lock, |
||||||
|
omp_destroy_lock, omp_destroy_nest_lock, |
||||||
|
omp_set_lock, omp_set_nest_lock, |
||||||
|
omp_unset_lock, omp_unset_nest_lock, |
||||||
|
omp_test_lock, omp_test_nest_lock, |
||||||
|
omp_get_wtime, omp_get_wtick) |
||||||
|
from wrf import Constants |
||||||
|
|
||||||
|
|
||||||
|
class OmpTest(ut.TestCase): |
||||||
|
longMessage = True |
||||||
|
|
||||||
|
def test_locks(self): |
||||||
|
l = omp_init_lock() |
||||||
|
omp_set_lock(l) |
||||||
|
omp_unset_lock(l) |
||||||
|
omp_test_lock(l) |
||||||
|
omp_destroy_lock(l) |
||||||
|
|
||||||
|
nl = omp_init_nest_lock() |
||||||
|
omp_set_nest_lock(nl) |
||||||
|
omp_unset_nest_lock(nl) |
||||||
|
omp_test_nest_lock(nl) |
||||||
|
omp_destroy_nest_lock(nl) |
||||||
|
|
||||||
|
|
||||||
|
def test_thread_set(self): |
||||||
|
omp_set_num_threads(4) |
||||||
|
max_threads = omp_get_max_threads() |
||||||
|
self.assertEqual(max_threads, 4) |
||||||
|
|
||||||
|
num_threads = omp_get_num_threads() |
||||||
|
self.assertEqual(num_threads, 1) # Always 1 outside of parallel region |
||||||
|
|
||||||
|
thread_num = omp_get_thread_num() |
||||||
|
self.assertEqual(thread_num, 0) # Always 0 outside of parallel region |
||||||
|
num_procs = omp_get_num_procs() |
||||||
|
in_parallel = omp_in_parallel() |
||||||
|
self.assertFalse(in_parallel) # Always False outside of parallel region |
||||||
|
|
||||||
|
limit = omp_get_thread_limit() |
||||||
|
|
||||||
|
|
||||||
|
def test_dynamic(self): |
||||||
|
omp_set_dynamic(True) |
||||||
|
dynamic = omp_get_dynamic() |
||||||
|
self.assertTrue(dynamic) |
||||||
|
|
||||||
|
omp_set_dynamic(False) |
||||||
|
dynamic = omp_get_dynamic() |
||||||
|
self.assertFalse(dynamic) |
||||||
|
|
||||||
|
def test_nested(self): |
||||||
|
omp_set_nested(True) |
||||||
|
nested = omp_get_nested() |
||||||
|
self.assertTrue(nested) |
||||||
|
|
||||||
|
omp_set_nested(False) |
||||||
|
nested = omp_get_nested() |
||||||
|
self.assertFalse(nested) |
||||||
|
|
||||||
|
|
||||||
|
def test_schedule(self): |
||||||
|
omp_set_schedule(Constants.OMP_SCHED_STATIC, 100000) |
||||||
|
kind, modifier = omp_get_schedule() |
||||||
|
self.assertEqual(kind, Constants.OMP_SCHED_STATIC) |
||||||
|
self.assertEqual(modifier, 100000) |
||||||
|
|
||||||
|
omp_set_schedule(Constants.OMP_SCHED_DYNAMIC, 10000) |
||||||
|
kind, modifier = omp_get_schedule() |
||||||
|
self.assertEqual(kind, Constants.OMP_SCHED_DYNAMIC) |
||||||
|
self.assertEqual(modifier, 10000) |
||||||
|
|
||||||
|
omp_set_schedule(Constants.OMP_SCHED_GUIDED, 100) |
||||||
|
kind, modifier = omp_get_schedule() |
||||||
|
self.assertEqual(kind, Constants.OMP_SCHED_GUIDED) |
||||||
|
self.assertEqual(modifier, 100) |
||||||
|
|
||||||
|
omp_set_schedule(Constants.OMP_SCHED_AUTO, 10) |
||||||
|
kind, modifier = omp_get_schedule() |
||||||
|
self.assertEqual(kind, Constants.OMP_SCHED_AUTO) |
||||||
|
self.assertNotEqual(modifier, 10) # The modifier argument is ignored, |
||||||
|
# so it will be set to the previous |
||||||
|
# value of 100. |
||||||
|
|
||||||
|
|
||||||
|
def test_team_level(self): |
||||||
|
omp_set_max_active_levels(10) |
||||||
|
active_levels = omp_get_max_active_levels() |
||||||
|
self.assertEqual(active_levels, 10) |
||||||
|
|
||||||
|
level = omp_get_level() |
||||||
|
ancestor_thread = omp_get_ancestor_thread_num(level) |
||||||
|
team_size = omp_get_team_size(level) |
||||||
|
active_level = omp_get_active_level() |
||||||
|
in_final = omp_in_final() |
||||||
|
|
||||||
|
|
||||||
|
def test_time(self): |
||||||
|
wtime = omp_get_wtime() |
||||||
|
wtick = omp_get_wtick() |
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
ut.main() |
||||||
|
|
@ -0,0 +1,36 @@ |
|||||||
|
from __future__ import print_function |
||||||
|
|
||||||
|
import time |
||||||
|
from netCDF4 import Dataset |
||||||
|
from wrf import getvar, ALL_TIMES, extract_vars |
||||||
|
|
||||||
|
wrf_filenames = ["/Users/ladwig/Documents/wrf_files/wrf_vortex_multi/wrfout_d02_2005-08-28_00:00:00", |
||||||
|
"/Users/ladwig/Documents/wrf_files/wrf_vortex_multi/wrfout_d02_2005-08-28_12:00:00", |
||||||
|
"/Users/ladwig/Documents/wrf_files/wrf_vortex_multi/wrfout_d02_2005-08-29_00:00:00"] |
||||||
|
|
||||||
|
wrfin = [Dataset(x) for x in wrf_filenames] |
||||||
|
|
||||||
|
my_cache = extract_vars(wrfin, ALL_TIMES, ("P", "PB", "PH", "PHB", "T", "QVAPOR", "HGT", "U", "V", "W", "PSFC")) |
||||||
|
|
||||||
|
start = time.time() |
||||||
|
for var in ("avo", "eth", "cape_2d", "cape_3d", "ctt", "dbz", "mdbz", |
||||||
|
"geopt", "helicity", "lat", "lon", "omg", "p", "pressure", |
||||||
|
"pvo", "pw", "rh2", "rh", "slp", "ter", "td2", "td", "tc", |
||||||
|
"theta", "tk", "tv", "twb", "updraft_helicity", "ua", "va", |
||||||
|
"wa", "uvmet10", "uvmet", "z", "cfrac", "zstag", "geopt_stag"): |
||||||
|
v = getvar(wrfin, var, ALL_TIMES) |
||||||
|
end = time.time() |
||||||
|
|
||||||
|
print ("Time taken without variable cache: ", (end-start)) |
||||||
|
|
||||||
|
start = time.time() |
||||||
|
for var in ("avo", "eth", "cape_2d", "cape_3d", "ctt", "dbz", "mdbz", |
||||||
|
"geopt", "helicity", "lat", "lon", "omg", "p", "pressure", |
||||||
|
"pvo", "pw", "rh2", "rh", "slp", "ter", "td2", "td", "tc", |
||||||
|
"theta", "tk", "tv", "twb", "updraft_helicity", "ua", "va", |
||||||
|
"wa", "uvmet10", "uvmet", "z", "cfrac", "zstag", "geopt_stag"): |
||||||
|
v = getvar(wrfin, var, ALL_TIMES, cache=my_cache) |
||||||
|
end = time.time() |
||||||
|
|
||||||
|
print ("Time taken with variable cache: ", (end-start)) |
||||||
|
|
Loading…
Reference in new issue