mirror of
https://github.com/TREX-CoE/fparser.git
synced 2024-08-24 22:21:45 +02:00
cleanup
This commit is contained in:
parent
930e7102a7
commit
7241cbe670
305
README.md
305
README.md
@ -1,167 +1,210 @@
|
|||||||
# A Modern Fortran-based Parser
|
# A Modern Fortran-based Parser
|
||||||
|
|
||||||
<!-- Thanks for visiting [The Markdown Guide](https://www.markdownguide.org)!
|
This repository contains a modern Fortran-based input file parser. It uses a modified libfdf library.
|
||||||
|
|
||||||
This Markdown cheat sheet provides a quick overview of all the Markdown syntax elements. It can’t cover every edge case, so if you need more information about any of these elements, refer to the reference guides for [basic syntax](https://www.markdownguide.org/basic-syntax) and [extended syntax](https://www.markdownguide.org/extended-syntax). -->
|
---
|
||||||
|
|
||||||
## Get the code
|
## 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
|
## Compilation
|
||||||
The project contains two folders (a) modified-libfdf and (b) parser.
|
The project contains two folders (a) modified-libfdf and (b) parser.
|
||||||
|
|
||||||
- Compile and install the modified-libfdf using the following set of commands
|
Compile and install the modified-libfdf using the following set of commands
|
||||||
```Console
|
|
||||||
./configure --prefix=/usr/local FC=ifort CC=icc
|
`./configure --prefix=/usr/local FC=ifort CC=icc`
|
||||||
make
|
|
||||||
sudo make install
|
`make`
|
||||||
make check
|
|
||||||
```
|
`sudo make install`
|
||||||
- In the parser folder, link the modified libfdf library with the interface Fortran file.
|
|
||||||
```
|
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
|
## Integrate parser in your code
|
||||||
|
Just include the interface.F90 file and the keyword declaration module files in the existing Makefile of 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
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 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 |
|
## Syntax
|
||||||
| ----------- | ----------- |
|
|
||||||
| Header | Title |
|
|
||||||
| Paragraph | Text |
|
|
||||||
|
|
||||||
### Fenced Code Block
|
1. Include another input file for parser to read using:
|
||||||
|
|
||||||
```
|
` %include global.inp`
|
||||||
{
|
|
||||||
"firstName": "John",
|
|
||||||
"lastName": "Smith",
|
|
||||||
"age": 25
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 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
|
5. Read molecular coordinates from an external .xyz file using
|
||||||
: definition
|
|
||||||
|
|
||||||
### 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
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
FC=ifort
|
FC=ifort
|
||||||
|
|
||||||
$FC -c m_periodic_table.F90 m_keywords.F90
|
#$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_keywords.F90
|
||||||
|
$FC interface.F90 m_keywords.o /usr/local/lib/libfdf.a
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
!
|
!
|
||||||
! Shows FDF capabilities..
|
|
||||||
!
|
!
|
||||||
PROGRAM iochamp
|
PROGRAM interface
|
||||||
USE fdf
|
USE fdf
|
||||||
USE prec
|
USE prec
|
||||||
|
|
||||||
@ -263,4 +262,4 @@ PROGRAM iochamp
|
|||||||
call fdf_shutdown()
|
call fdf_shutdown()
|
||||||
|
|
||||||
!----------------------------------------------------------------------------END
|
!----------------------------------------------------------------------------END
|
||||||
END PROGRAM iochamp
|
END PROGRAM interface
|
||||||
|
Loading…
Reference in New Issue
Block a user