From 7241cbe67032ed0555b90e73381961c09b31ffa4 Mon Sep 17 00:00:00 2001 From: Ravindra Shinde Date: Fri, 26 Mar 2021 06:13:07 +0100 Subject: [PATCH] cleanup --- README.md | 305 ++++++++++++++++++++++++------------------- parser/build.sh | 5 +- parser/interface.F90 | 5 +- 3 files changed, 179 insertions(+), 136 deletions(-) diff --git a/README.md b/README.md index 5e47e40..931cf6a 100644 --- a/README.md +++ b/README.md @@ -1,167 +1,210 @@ # A Modern Fortran-based Parser - +--- ## Get the code - The parser uses a modified libfdf library. This is included in this repository as a submodule. To clone the entire project, do + The library is included in this repository as a submodule. To clone the entire project, do - `git clone --recurse-submodules https://github.com/TREX-CoE/iof08.git` + `git clone --recurse-submodules https://github.com/TREX-CoE/fparser.git` ## Compilation The project contains two folders (a) modified-libfdf and (b) parser. - - Compile and install the modified-libfdf using the following set of commands - ```Console - ./configure --prefix=/usr/local FC=ifort CC=icc - make - sudo make install - make check - ``` - - In the parser folder, link the modified libfdf library with the interface Fortran file. - ``` + Compile and install the modified-libfdf using the following set of commands + + `./configure --prefix=/usr/local FC=ifort CC=icc` + + `make` + + `sudo make install` + + In the parser folder, link the modified libfdf library with the interface Fortran file. + + `ifort -c interface.F90 m_keywords.F90 m_periodic_table.F90 /usr/local/lib/libfdf.a` + ## Integrate parser in your code - - - -### Features of the parser (including inheritance from libfdf) - -- Include another input file for parser to read using: - -` %include global.inp` - -- Include a data file for parser to read using: - -` load label filename` - -Here, depending upon the label, parser will provide the filename. For example, - -` load basis cc-pvtz.gbs` - -- Read molecular coordinates directly from the input file using - -```perl -%block molecule -12 - #benzene comment - C 0.00000 1.40272 0 - H 0.00000 2.49029 0 - C -1.21479 0.70136 0 - H -2.15666 1.24515 0 - C -1.21479 -0.70136 0 - H -2.15666 -1.24515 0 - C 0.00000 -1.40272 0 - H 0.00000 -2.49029 0 - C 1.21479 -0.70136 0 - H 2.15666 -1.24515 0 - C 1.21479 0.70136 0 - H 2.15666 1.24515 0 -%endblock -``` - -- Read molecular coordinates from an external .xyz file using - -` %block molecule < caffeine.xyz ` - - -- Group certain keywords using the %module construct - -```perl -%module DMC - tau = 0.04 - etrial = -15 Ha -%endmodule -``` - -- Logical variables accept true, TRUE, T, 1, .true. as valid keywords for true -` optimize_wavefunction true` - - - - -**bold text** - -### Italic - -*italicized text* - -### Blockquote - -> blockquote - -### Ordered List - -1. First item -2. Second item -3. Third item - -### Unordered List - -- First item -- Second item -- Third item - -### Code - -`code` - -### Horizontal Rule + Just include the interface.F90 file and the keyword declaration module files in the existing Makefile of your code. --- -### Link +## Features of the parser (including inheritance from libfdf) -[title](https://www.example.com) +- Blank lines and lines starting with # are ignored. -### Image +- The order of keyword-value pairs does not matter -![alt text](image.jpg) +- Multiple keyword-value pairs can be put in a single line -## Extended Syntax +- Keywords are case insensitive. -These elements extend the basic syntax by adding additional features. Not all Markdown applications support these elements. +- A default value can be set for keywords not present in the input file. -### Table -| Syntax | Description | -| ----------- | ----------- | -| Header | Title | -| Paragraph | Text | +## Syntax -### Fenced Code Block +1. Include another input file for parser to read using: -``` -{ - "firstName": "John", - "lastName": "Smith", - "age": 25 -} -``` + ` %include global.inp` -### Footnote +2. Include a data file for parser to read using: -Here's a sentence with a footnote. [^1] + ` load label filename` -[^1]: This is the footnote. +3. Here, depending upon the label, parser will provide the filename. For example, -### Heading ID + ` load basis cc-pvtz.gbs` -### My Great Heading {#custom-id} +4. Read molecular coordinates directly from the input file using -### Definition List + ```perl + %block molecule + 12 + #benzene comment + C 0.00000 1.40272 0 + H 0.00000 2.49029 0 + C -1.21479 0.70136 0 + H -2.15666 1.24515 0 + C -1.21479 -0.70136 0 + H -2.15666 -1.24515 0 + C 0.00000 -1.40272 0 + H 0.00000 -2.49029 0 + C 1.21479 -0.70136 0 + H 2.15666 -1.24515 0 + C 1.21479 0.70136 0 + H 2.15666 1.24515 0 + %endblock + ``` -term -: definition +5. Read molecular coordinates from an external .xyz file using -### Strikethrough + ` %block molecule < benzene.xyz ` -~~The world is flat.~~ +6. Group certain keywords using the %module construct -### Task List + ```perl + %module DMC + tau = 0.04 + etrial = -15 Ha + %endmodule + ``` + +7. Logical variables accept `true`, `TRUE`, `T`, `.true.` as valid keywords for `True`. The `fdf_boolean` function can also take "1" as true and "0" as false from the input. + + ` optimize_wavefunction true` + +8. Single and Double precision numbers along with numbers in scientific format can be read using the `fdf_get()` function. + + `energy_tol = fdf_get('energy_tol', 0.00001d0)` + +9. Floats/integers/strings/booleans can be parsed generically using the interface `fdf_get()` function. + + ` sr_tau = fdf_get('sr_tau', 0.025d0)` + + ` nspin1 = fdf_get('nspin1', 1)` + + ` opt_method = fdf_get('opt_method', "sr_n")` + + ` multiple_adiag = fdf_get('multiple_adiag', .false.)` + +10. Units can be specified to variables. Unit conversion is possible at the parsing. + + If the input file has `etrial = -15 Ha` entry, the `etrial` variable can be assigned values using the `fdf_physical` function with unit conversion. + + ` etrial = fdf_physical('etrial', -20.d0, 'eV')` + +11. List of public functions available for parsing the data: + + Initiate + + `fdf_init` + + `fdf_shutdown` + + Single data + + `fdf_get` + + `fdf_integer` + + `fdf_single` + + `fdf_double` + + `fdf_string` + + `fdf_boolean` + + `fdf_physical` + + `fdf_convfac` + + `fdf_load_filename` + + Lists (data enclosed in []) + + `fdf_islist` + + `fdf_islinteger` + + `fdf_islreal` + + `fdf_list` + + `fdf_linteger` + + `fdf_ldouble` + + Returns the string associated with a mark line + + `fdf_getline` + + Test if a label is defined + + `fdf_defined` + + `fdf_isphysical` + + `fdf_isblock` + + `fdf_load_defined` + + Allow to overwrite things in the FDF + + `fdf_overwrite` + + `fdf_removelabel` + + `fdf_addline` + + Block reading (processing each line of data) + + `fdf_block, fdf_block_linecount` + + `fdf_bline, fdf_bbackspace, fdf_brewind, fdf_bclose` + + `fdf_bnintegers, fdf_bnreals, fdf_bnvalues, fdf_bnnames, fdf_bntokens` + + `fdf_bintegers, fdf_breals, fdf_bvalues, fdf_bnames, fdf_btokens` + + `fdf_bboolean, fdf_bphysical` + + `fdf_bnlists, fdf_bnilists, fdf_bnrlists, fdf_bnvlists` + + `fdf_bilists, fdf_brlists, fdf_bvlists` + + Match, search over blocks, and destroy block structure + + `fdf_bmatch, fdf_bsearch, fdf_substring_search` + + `fdf_setoutput, fdf_setdebug` + +--- + +## Demonstration + + In the `parser` folder, we have included a sample `interface.F90` and `m_keywords.F90` files. In the `interface.F90` file, we have demonstrated how keyword-values pairs, simple data blocks, and data from external files can be read easily. -- [x] Write the press release -- [ ] Update the website -- [ ] Contact the media diff --git a/parser/build.sh b/parser/build.sh index 91a6ad7..43f52ea 100755 --- a/parser/build.sh +++ b/parser/build.sh @@ -1,5 +1,6 @@ #!/bin/bash FC=ifort -$FC -c m_periodic_table.F90 m_keywords.F90 -$FC interface.F90 m_keywords.o m_periodic_table.o /usr/local/lib/libfdf.a +#$FC -c m_periodic_table.F90 m_keywords.F90 +$FC -c m_keywords.F90 +$FC interface.F90 m_keywords.o /usr/local/lib/libfdf.a diff --git a/parser/interface.F90 b/parser/interface.F90 index 8fd0f6f..a386674 100644 --- a/parser/interface.F90 +++ b/parser/interface.F90 @@ -1,7 +1,6 @@ ! -! Shows FDF capabilities.. ! -PROGRAM iochamp +PROGRAM interface USE fdf USE prec @@ -263,4 +262,4 @@ PROGRAM iochamp call fdf_shutdown() !----------------------------------------------------------------------------END -END PROGRAM iochamp +END PROGRAM interface